2016-11-16 5 views
0

私は基本的にいくつかの簡単なjsonファイルを読み込んで、1つのフィールドで分割されたorcファイルとして書き込むようにしているpython sparkジョブを持っています。パーティションはあまりバランスが取れていません。いくつかのキーは本当に大きく、他は本当に小さくなっています。write.save上のSpark partitionByはすべてのデータをドライバに持ち込みますか?

このような何かをやったとき、私はメモリの問題を持っていた:執行にメモリを追加する

events.write.mode('append').partitionBy("type").save("s3n://mybucket/tofolder"), format="orc") 

は何ら影響を与えていないようでしたが、私は、ドライバメモリを増やし、それを解決しました。これは、すべてのデータがドライバに書き込まれるように送信されていることを意味しますか?各エグゼキュータが独自のパーティションを書き込むことはできませんか? Spark 2.0.1を使用しているIm

答えて

0

データセットを分割してストレージに書き込んだとしても、レコードがドライバに送信される可能性はありません。あなたは、メモリ問題(ドライバやエグゼキュータで発生した場合)のログを見て、失敗の正確な原因を把握する必要があります。

これまでの計算では、おそらくあなたのドライバのメモリが少なすぎてwriteを処理できませんでした。古いジョブとステージのメタデータにメモリを節約するには、spark.ui.retainedJobsspark.ui.retainedStagesを減らしてみてください。これで問題が解決しない場合は、ドライバにjvisualvmで接続すると、ジョブ/ステージが大量のヒープフラグメントを消費して最適化しようとするよりも優先されます。

+0

私は実際に何千ものファイルを扱っていましたが、実際にはドライバのメモリを満たすパスの配列でした。 –

関連する問題