2016-07-30 8 views
0

mapPartitionなどを使用して各パーティションの設定作業を行うことができますが、各エグゼキュータで処理するパーティションが多数あり、各パーティションが正確なセットアップ作業を行います。同じエグゼキュータ内のパーティションがセットアップ作業を繰り返す必要がないように、パーティションではなくエグゼキュータのセットアップ作業を行うことができるのだろうかと思います。Spark:パーティションではなくエグゼキュータのセットアップ作業を行う

答えて

0

二つの方法

  1. broadcast variableを使用してください。これは大部分が、すべてのエグゼキュータに大きな構造体をコピーするように調整されているため、そのユースケースに当てはまるかどうかはわかりません。私はそれがあなたのユースケースに当てはまるならば、これが正しいことを得るのがずっと容易だからと言います。

  2. すべての設定作業を行う値をlazyに設定して、その値をRDD変換内で使用してください。値は変換前に必要とされないため、エバリュエーターに達するとその評価がトリガーされます。その後、lazyによって、JVMインスタンスごとに1回だけ実行されるため、エグゼキュータごとに1回実行されます。

    私は現在のプロジェクトでこの手法を使用していますので、免責条項を追加する必要があります:直列化エラーを避けるためにこれを非常に慎重にコーディングする必要があります...シリアライズ可能ではないものあなたのセットアップコードで。

EDIT

私はあなたが「スカラ座」だけの「Java」をタグ付けしていない事実を逃したいくつかの理由ですみません。私が与えた助言は有効だと思いますが、そこに怠惰を得るためにちょっと働かなければならないでしょう - although that appears to not be too difficult now that Java 8 has lambdas

+0

ありがとうございます。私はそれにショットを与えます – weipengHU

+0

私はhavaは放送変数を使用すると思ったが、私はブロードキャストする必要があるオブジェクトは、シリアル化可能ではない – weipengHU

関連する問題