2017-01-31 7 views
0

У меня есть два набора данных, и мне нужно зарегистрировать один набор данных (меньший) в качестве широковещательной передачи при попытке регистрации. Я могу использовать функции вещания.Применить набор данных как широковещательную рассылку в Spark

Вот код:

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). Если iregister какую-либо ручную карту, как широко транслирует ее работы, но в случае текстовых файлов она не работает.

+0

'Broadcast > broadcastVar = ctx.broadcast (mapss.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() принесет весь rdd водителя может бросить исключение ООГО. Широковещательная передача предлагается для данных меньшего размера.

+0

Можем ли мы собрать rdd как rdd.collectAsMap? или любым другим способом конвертировать в карту insted of list? – user4342532

+0

'rdd.collectAsMap' тоже отлично. – mrsrinivas

+0

rdd.collectAsMap() не отображается. – user4342532

Смежные вопросы