2016-11-16 13 views
1

My Sparkアプリケーションがいくつかのエグゼキュータを起動します。 私はエグゼキュータを介して広がるいくつかのパーティションを持っています。Spark - エグゼキュータコンテキストごとに異なる変数を作成する方法は?

これらのパーティションでmap()を使用している場合、MongoDB接続(MongoDB Java Driver)を使用してそこからより多くのデータをクエリし、このデータを処理してmap()関数の出力として返します。

エグゼキュータごとに1つの接続を作成したいとします。 各パーティションはこのexecutor-local変数にアクセスし、それを使用してデータを照会する必要があります。

各パーティションの接続を確立することは、おそらく良い考えではありません。接続をブロードキャストすることは、シリアル化可能ではないためには機能しません(私は思っていますか?)。

それを合計するには、次の

  • どのように各エグゼキュータコンテキストの異なる変数を作成するには?
+0

map()またはmapPartitions()を使用しましたか? – Shankar

答えて

1

MongoConnectorを使用してください。

コレクションの作成を処理し、MongoClientのシャットダウンを効率的に処理するキャッシュによってバックアップされます。シリアライズ可能なので、ブロードキャストにすることができ、オプション、readConfigまたはSparkコンテキストを使用して接続先を設定できます。

MongoConnectorはMongoDBの基になる接続の参照管理を処理するためにローンパターンを使用しMongoClientMongoDatabase又はMongoCollectionレベルでのアクセスを可能にします。

関連する問題