前提条件
MongoDBとApache Sparkに関する基本知識。詳しくは、 MongoDB のドキュメント とSpark のドキュメント を参照してください。
MongoDB バージョン4.2以降
Sparkバージョン 4.0 以降
Java 8以降
スタートガイド
重要
Connector のバージョン10.0.0以降では、MongoDB からの読み取りと MongoDB への書込みに形式mongodbを使用します。
df = spark.read.format("mongodb").load()
依存関係マネジメント
Spark Core、Spark SQL、MongoDB Spark Connector の依存関係を依存関係管理ツールに指定します。
次の例は、これらの依存関係を Maven pom.xmlファイルに含める方法を示しています。
<dependencies> <dependency> <groupId>org.mongodb.spark</groupId> <artifactId>mongo-spark-connector_2.13</artifactId> <version>11.1.0</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.13</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.13</artifactId> <version>4.0.0</version> </dependency> </dependencies>
構成
SparkSession経由で Connector 構成を指定する場合、 設定の前に適切に設定する必要があります。 詳細とその他の使用可能な MongoDB Spark Connector オプションについては、「 Spark の構成」ガイドを参照してください。
package com.mongodb.spark_examples; import org.apache.spark.sql.SparkSession; public final class GettingStarted { public static void main(final String[] args) throws InterruptedException { /* Create the SparkSession. * If config arguments are passed from the command line using --conf, * parse args for the values to set. */ SparkSession spark = SparkSession.builder() .master("local") .appName("MongoSparkConnectorIntro") .config("spark.mongodb.read.connection.uri", "mongodb://127.0.0.1/test.myCollection") .config("spark.mongodb.write.connection.uri", "mongodb://127.0.0.1/test.myCollection") .getOrCreate(); // Application logic } }
spark.mongodb.read.connection.uriでは、MongoDB サーバーのアドレス(127.0.0.1)、接続するデータベース(test)、データを読み取るコレクション(myCollection)と読み込み設定(read preference)を指定します。spark.mongodb.write.connection.uriは、MongoDB サーバーアドレス(127.0.0.1)、接続するデータベース(test)、データを書き込むコレクション(myCollection)を指定します。
SparkSessionオブジェクトを使用して、MongoDB へのデータの書き込み、MongoDB からのデータの読み取り、データセットの作成、SQL 操作の実行を行えます。
重要
Connector のバージョン10.0.0以降では、MongoDB からの読み取りと MongoDB への書込みに形式mongodbを使用します。
df = spark.read.format("mongodb").load()
Python Spark shell
このチュートリアルではpyspark shell を使用しますが、このコードは自己完結型の Python アプリケーションでも動作します。
pyspark shell を起動するときに、以下を指定できます。
MongoDB Spark Connector パッケージをダウンロードするには、
--packagesオプションを使用します。 次のパッケージが利用できます。mongo-spark-connector
MongoDB Spark Connector を構成するには、
--confオプションを使用します。 これらの設定はSparkConfオブジェクトを構成します。注意
SparkConfを使用してSpark Connectorを構成する場合は、 の前に適切に設定する必要があります。 詳細とその他の使用可能な MongoDB Spark Connector オプションについては、「 Spark の構成」ガイドを参照してください。
次の例では、コマンドラインからpyspark shell を起動します。
./bin/pyspark --conf "spark.mongodb.read.connection.uri=mongodb://127.0.0.1/test.myCollection?readPreference=primaryPreferred" \ --conf "spark.mongodb.write.connection.uri=mongodb://127.0.0.1/test.myCollection" \ --packages org.mongodb.spark:mongo-spark-connector_2.12:11.1.0
spark.mongodb.read.connection.uriでは、MongoDB サーバーのアドレス(127.0.0.1)、接続するデータベース(test)、データを読み取るコレクション(myCollection)と読み込み設定(read preference)を指定します。spark.mongodb.write.connection.uriは、MongoDB サーバーアドレス(127.0.0.1)、接続するデータベース(test)、データを書き込むコレクション(myCollection)を指定します。 デフォルトでポート27017に接続します。packagesオプションは、Spark Connector の Maven 座標をgroupId:artifactId:version形式で指定します。
このチュートリアルの例では、このデータベースとコレクションを使用します。
SparkSession オブジェクトの作成
注意
pysparkを起動すると、デフォルトでsparkと呼ばれるSparkSessionオブジェクトが生成されます。 スタンドアロンの Python アプリケーションでは、以下に示すようにSparkSessionオブジェクトを明示的に作成する必要があります。
pysparkの起動時にspark.mongodb.read.connection.uriとspark.mongodb.write.connection.uri構成オプションを指定した場合、デフォルトのSparkSessionオブジェクトはそれらを使用します。 pyspark内から独自のSparkSessionオブジェクトを作成する場合は、 SparkSession.builderを使用して別の構成オプションを指定できます。
from pyspark.sql import SparkSession my_spark = SparkSession \ .builder \ .appName("myApp") \ .config("spark.mongodb.read.connection.uri", "mongodb://127.0.0.1/test.coll") \ .config("spark.mongodb.write.connection.uri", "mongodb://127.0.0.1/test.coll") \ .getOrCreate()
SparkSessionオブジェクトを使用して、MongoDB へのデータの書き込み、MongoDB からのデータの読み取り、DataFrames の作成、SQL 操作の実行を行えます。
重要
Connector のバージョン10.0.0以降では、MongoDB からの読み取りと MongoDB への書込みに形式mongodbを使用します。
df = spark.read.format("mongodb").load()
Spark shell
Spark shell を起動するときに、以下を指定します。
MongoDB Spark Connector パッケージをダウンロードするには、
--packagesオプションを使用します。 次のパッケージが利用できます。mongo-spark-connector
MongoDB Spark Connector を構成するには、
--confオプションを使用します。 これらの設定はSparkConfオブジェクトを構成します。注意
SparkConfを使用してSpark Connectorを構成する場合は、 の前に適切に設定する必要があります。 詳細とその他の使用可能な MongoDB Spark Connector オプションについては、「 Spark の構成」ガイドを参照してください。
たとえば、
./bin/spark-shell --conf "spark.mongodb.read.connection.uri=mongodb://127.0.0.1/test.myCollection?readPreference=primaryPreferred" \ --conf "spark.mongodb.write.connection.uri=mongodb://127.0.0.1/test.myCollection" \ --packages org.mongodb.spark:mongo-spark-connector_2.12:11.1.0
spark.mongodb.read.connection.uriでは、MongoDB サーバーのアドレス(127.0.0.1)、接続するデータベース(test)、データを読み取るコレクション(myCollection)と読み込み設定(read preference)を指定します。spark.mongodb.write.connection.uriは、MongoDB サーバーアドレス(127.0.0.1)、接続するデータベース(test)、データを書き込むコレクション(myCollection)を指定します。 デフォルトでポート27017に接続します。packagesオプションは、Spark Connector の Maven 座標をgroupId:artifactId:version形式で指定します。
MongoDB Connector パッケージのインポート
Spark shell に次のパッケージをインポートして、 オブジェクトと オブジェクトで MongoDB Connector 固有の関数と暗黙的な機能を有効にします。SparkSessionDataset
import com.mongodb.spark._
MongoDB に接続する
MongoDB への接続は、Dataset アクションで MongoDB からの読み取りまたは MongoDB への書き込みが必要な場合に、自動的に行われます。
自己完結型の Scala アプリケーション
依存関係マネジメント
Spark Core、Spark SQL、MongoDB Spark Connector の依存関係を依存関係管理ツールに指定します。
次の抜粋は、これらの依存関係を SFTbuild.scala ファイルに含める方法を示しています。
scalaVersion := "2.13", libraryDependencies ++= Seq( "org.mongodb.spark" %% "mongo-spark-connector_2.13" % "11.1.0", "org.apache.spark" %% "spark-core" % "4.0.0", "org.apache.spark" %% "spark-sql" % "4.0.0" )
構成
SparkSession経由で Connector 構成を指定する場合、 設定の前に適切に設定する必要があります。 詳細とその他の使用可能な MongoDB Spark Connector オプションについては、「 Spark の構成」ガイドを参照してください。
package com.mongodb object GettingStarted { def main(args: Array[String]): Unit = { /* Create the SparkSession. * If config arguments are passed from the command line using --conf, * parse args for the values to set. */ import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .master("local") .appName("MongoSparkConnectorIntro") .config("spark.mongodb.read.connection.uri", "mongodb://127.0.0.1/test.myCollection") .config("spark.mongodb.write.connection.uri", "mongodb://127.0.0.1/test.myCollection") .getOrCreate() } }
トラブルシューティング
java.net.BindException: Can't assign requested addressを取得した場合、
別の Spark shell がすでに実行されていないことを確認してください。
SPARK_LOCAL_IP環境変数を設定してみてください。例:export SPARK_LOCAL_IP=127.0.0.1 Spark shell を起動するときに、次のオプションを含めてみてください。
--driver-java-options "-Djava.net.preferIPv4Stack=true"
このチュートリアルの例の実行中にエラーが発生した場合は、ローカル Ividy キャッシュ( ~/.ivy2/cache/org.mongodb.sparkと~/.ivy2/jars )をクリアする必要がある場合があります。
Integrations
次のセクションでは、 SparkとMongoDB Spark コネクタを統合できる一般的なサードパーティのプラットフォームについて説明します。
Amazon
Amazon EDR は、 Sparkのような大規模なデータフレームワークを実行するために使用できるマネージドクラスタープラットフォームです。 EDR クラスターにSparkをインストールするには、 AWSドキュメントの「 Amazon EDR を使い始める 」を参照してください。
Databricks
Databricks は、エンタープライズ レベルのデータをビルド、配置、共有するための分析プラットフォームです。 MongoDB Spark コネクタ をDatabricks と統合するには、Databricks ドキュメントの「 MongoDB 」を参照してください。
Docker
Docker は、開発者がコンテナ内でアプリケーションを構築、共有、実行するのに役立つオープンソース プラットフォームです。
DockerコンテナでSparkを起動するには、 DockerドキュメントのApache Sparkを参照し、提供された手順に従います。
Dockerに Atlas を配置する方法については、 「 Dockerを使用してローカル Atlas 配置の作成 」を参照してください。
Kubernetes
Kubernetes は、コンテナ化マネジメントを自動化するためのオープンソース プラットフォームです。 KubernetesでSpark を実行するには、 Sparkドキュメントの「 KubernetesでのSpark の実行 」を参照してください。