java - 在 Spark 中将数据集应用为广播

标签 java hadoop apache-spark spark-dataframe broadcast

我有两个数据集,我需要在尝试注册时将一个数据集(较小的一个)注册为 Broadcast,我才能使用广播功能。

代码如下:

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)。如果将任何手动 map 注册为广播,则效果很好,但如果是文本文件,则效果不佳。

最佳答案

为了向集群广播任何数据,它必须来自驱动程序。因此,collect() 您的 rdd 并广播它。

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

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

Please be aware collect() will bring entire rdd to driver it might throw OOM exception. Broadcast is suggested for less sized data.

关于java - 在 Spark 中将数据集应用为广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956676/

相关文章:

apache-spark - Spark MLLib 与新用户的协同过滤

Hadoop: `hdfs getconf -confKey [key]` 有哪些关键参数可用?

hadoop - 从hadoop HDFS数据中搜索

hadoop - 为什么我们需要 MapReduce 中的 "map"部分?

java - 简单的Java并发问题

events - 从 HDFS 接收文件系统事件和通知

hadoop - 部署 Spark 的最佳方式?

java - Scala - Java 互操作 : can Scala emit enums in bytecode for Java to consume?

java - Android谷歌地图如何用fillColor绘制复杂的多边形

java - 如何使用java将iphone的png文件转换为标准png文件