私は既に多くの研究をしましたが、解決策を見つけることができませんでした。私がここで見つけることができる最も近い質問はWhy my SPARK works very slowly with mongoDBです。mongodbから効率的にデータを読み込み、それをsparkのデータフレームに変換する方法は?
mongo-hadoopコネクタを使用して、spongのDataFrameにmongodbコレクションをロードしようとしています。関連するコードのスニペットは次のとおりです。
connection_string = 'mongodb://%s:%s/randdb.%s'%(dbhost, dbport, collection_name)
trainrdd = sc.mongoRDD(connection_string, config=config)
# traindf = sqlcontext.createDataFrame(trainrdd)
# traindf = sqlcontext.read.json(trainrdd)
traindf = sqlcontext.jsonRDD(trainrdd)
ここで、「sc」はSparkContextオブジェクトです。私はコード内でコメントアウトされているバリアントも試しました。しかし、すべてが同じように遅いです。サイズが2GB(100000行と1000列)のコレクションの場合、12コアと72 GB RAMを持つ3台のマシンのクラスターで(このスパーククラスター内のすべてのコアを使用して)約6時間(神聖モリ:/)になります。 Mongodbサーバは、これらのマシンの1つでも動作しています。
正しく行っているかわかりません。このコードをどのように最適化するかについての指針は本当に役に立ちます。
を参照していますか?他の方法でRDDをDataFrameに変換できますか? –
こんにちはワン お返事ありがとうございます。はい、実際のアクションは 'sqlcontext.jsonRDD(trainrdd)'を呼び出すと開始します。これにより、mongodbの読み込みが開始され、接続が確立され、削除されたことを示すmongodbログが記録されます。私は他の方法(上記のコードでコメントアウト)を試みましたが、これも同様に遅いです。最近、mongodbコレクションからエクスポートされたjsonファイルでsqlcontext.read.jsonを試しました。これは比較的速く比較的に機能しました。 – bitspersecond
[mongodb mongo-hadoop spark connector](https://github.com/mongodb/mongo-hadoop/blob/master/spark/src/main/python/README.rst)のどのjarバージョンを使用していますか? MongoDBサーバをSparkノードから分離することはできますか? –