6

Spark の Hadoop の分散キャッシュに似た機能を探しています。いくつかの計算を行うために、すべてのノードに存在する比較的小さなデータ ファイル (いくつかのインデックス値を含む) が必要です。Spark でこれを可能にするアプローチはありますか?

これまでの私の回避策は、通常の処理としてインデックス ファイルを配布して縮小することで構成されており、私のアプリケーションでは約 10 秒かかります。その後、次のように、ブロードキャスト変数として示すファイルを永続化します。

JavaRDD<String> indexFile = ctx.textFile("s3n://mybucket/input/indexFile.txt",1);
ArrayList<String> localIndex = (ArrayList<String>) indexFile.collect();    

final Broadcast<ArrayList<String>> globalIndex = ctx.broadcast(indexVar);

これにより、プログラムは変数globalIndexの内容を理解できるようになります。これまでのところ、私にとっては問題ないかもしれないパッチですが、最善の解決策ではないと考えています. かなり大きなデータセットや大量の変数でも効果があるでしょうか?

注: 複数の EC2 インスタンスに配置されたスタンドアロン クラスターで実行されている Spark 1.0.0 を使用しています。

4

2 に答える 2

6

方法をご覧くださいSparkContext.addFile()。それがあなたが探していたものだと思います。

于 2016-02-19T00:49:19.987 に答える
0

ブロードキャスト変数を使用する限り、より大きなデータセットでも効果的です。

Spark のドキュメントから 「ブロードキャスト変数を使用すると、プログラマーは読み取り専用の変数を各マシンにキャッシュしておくことができ、そのコピーをタスクと共に配布する必要がなくなります。たとえば、すべてのノードに大きな入力データセットのコピーを与えるために使用できます。効率的に。」

于 2015-01-28T13:19:28.150 に答える