2017-01-31 6 views
0

にブロードキャストとしてデータセットを適用します。ここでは、私は2つのデータセットを持っている、と私はブロードキャストとして1セット(1より小さい)を登録する必要が登録しようとしたとき、私は、ブロードキャスト機能を使用するanable午前スパーク

はコードです:

ここ
JavaRDD<String> maps = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt"); 
Broadcast<JavaRDD<String>> broadcastVar = ctx.broadcast(maps); 
//Broadcast<Map<Integer, String>> broadcastVar = ctx.broadcast(map); 
List<Integer> list = new ArrayList<Integer>(); 
list.add(1); 
list.add(2); 
list.add(9); 
JavaRDD<Integer> listrdd = ctx.parallelize(list); 
JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value()); 
System.out.println(mapr.collect()); 

私はbroadcastVar.value().get(x)を取得することはできませんよ。ブロードキャストとしてマニュアルマップを登録すると、そのマップはうまく動作しますが、テキストファイルの場合は動作しません。

+0

'Broadcast > broadcastVar = ctx.broadcast(maps.collect());'? – mrsrinivas

+0

ありがとうございました。 – user4342532

答えて

3

クラスタにデータをブロードキャストするには、は、ドライバからのものでなければなりません。だからcollect()あなたのrddをブロードキャストしてください。

JavaRDD<String> rdd = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt"); 

Broadcast<List<String>> broadcastVar = ctx.broadcast(rdd.collect()); 

collect()に注意してください、それがOOM例外がスローされることがありますドライバーに全体rddをもたらすでしょう。サイズの小さいデータに対してはブロードキャストが推奨されます。

+0

rdd.collectAsMapとしてrddを収集できますか? など、リストのマップinstedに変換する他の方法ですか? – user4342532

+0

'rdd.collectAsMap'も問題ありません。 – mrsrinivas

+0

rdd.collectAsMap()が表示されません。 – user4342532

関連する問題