在 Spark 中将数据集应用为广播
Apply dataset as Broadcast in Spark
我有两个数据集,我需要在尝试注册时将一个数据集(较小的一个)注册为 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)
。如果 iregister 任何手动地图作为广播它工作正常,但在文本文件的情况下它不起作用。
为了将任何数据广播到集群,它必须来自驱动程序。所以,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.
我有两个数据集,我需要在尝试注册时将一个数据集(较小的一个)注册为 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)
。如果 iregister 任何手动地图作为广播它工作正常,但在文本文件的情况下它不起作用。
为了将任何数据广播到集群,它必须来自驱动程序。所以,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 entirerdd
to driver it might throw OOM exception. Broadcast is suggested for less sized data.