Java 将数据集应用为Spark中的广播
我有两个数据集,在尝试注册时,我需要注册一个数据集(较小的一个)作为广播,我可以使用广播功能 代码如下:Java 将数据集应用为Spark中的广播,java,hadoop,apache-spark,spark-dataframe,broadcast,Java,Hadoop,Apache Spark,Spark Dataframe,Broadcast,我有两个数据集,在尝试注册时,我需要注册一个数据集(较小的一个)作为广播,我可以使用广播功能 代码如下: JavaRDD<String> maps = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt"); Broadcast<JavaRDD<String>> broadcastVar = ctx.broadcast(maps); //Broadcast<Map<Integer, Stri
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());
javarddmaps=ctx.textFile(“C:\\Users\\sateesh\\Desktop\\country.txt”);
Broadcast broadcastVar=ctx.Broadcast(地图);
//广播VAR=ctx.广播(map);
列表=新的ArrayList();
增加第(1)款;
增加(2);
增加(9);
javarddlistrdd=ctx.parallelize(列表);
javarddmapr=listrdd.map(x->broadcastVar.value());
System.out.println(mapr.collect());
这里我无法获取
broadcastVar.value().get(x)
。如果我将任何手动地图注册为广播,则其工作正常,但如果是文本文件,则无法工作。为了将任何数据广播到群集,它必须来自驱动程序。因此,collect()
您的rdd
并广播它
JavaRDD<String> rdd = ctx.textFile("C:\\Users\\sateesh\\Desktop\\country.txt");
Broadcast<List<String>> broadcastVar = ctx.broadcast(rdd.collect());
JavaRDD rdd=ctx.textFile(“C:\\Users\\sateesh\\Desktop\\country.txt”);
Broadcast broadcastVar=ctx.Broadcast(rdd.collect());
请注意collect()
会将整个rdd
带到驱动程序,它可能会引发异常。对于较小的数据,建议进行广播
broadcastBroadcastVar=ctx.Broadcast(maps.collect())代码>?谢谢,正在工作。我们可以将rdd收集为rdd.collectAsMap吗?或者使用任何其他方式转换为地图而不是列表?rdd.collectAsMap
也可以。rdd.collectAsMap
仅适用于pairdd
s。