2017-12-06 4 views
0

処理されたデータセット(クラスタ上)の結果をHDFSおよびリレーショナルデータベースに書き込むスパークジョブのパフォーマンスを微調整しようとしています。私はdataset.write().jdbc()とdataset.write().csv()メソッドをそれぞれ使用しています。これらの方法ですべての行がドライバノードに収集され、ジョブのパフォーマンスに影響を与えるかどうかは疑問です。spark dataset.write()はドライバノードで収集された行を生成しますか?

答えて

0

いいえ、コードでcollectまたは​​3210を使用しない限り、各エグゼキュータは独自のRDDを書き込みます。

+0

ああ私は合体を使用しました!本当に必要なの?私はちょうどいくつかの既存のコードをコピーしました! –

+0

複数のエグゼキュータがある場合、各エグゼキュータは独自のファイルを作成しますが、例として、1つのファイルが必要な場合があります。次に、coalesce(1)を使用します。この呼び出しは、すべてのデータをドライバに渡し、1つのファイルを書き込みます。複数のファイルがうまくいけば、それは必要ありません。 – afsd

+0

複数ファイルの場合、同じファイルの異なるパートファイルを意味しますか?どうやら、私はcsv()メソッドに1つのファイル名とパスを与え、その名前でそのファイルを読み込めるようにしたいと考えています。また、すべての行がデータベース内の同じテーブルに移動すると、合体によってwrite.jdbcにどのような影響が生じますか。 –

2

spark dataset.write()はドライバノードで収集された行を生成しますか?

これはありません。すべてのDataFrameWriterメソッドは、収集することなく直接(各エグゼキュータはデータの独自の部分を書き込みます)機能します。

関連する問題