访问Spark java中的广播变量

时间:2016-12-21 06:08:59

标签: apache-spark apache-spark-sql lookup rdd broadcast

我需要使用Java RDD API处理spark Broadcast变量。这是我到目前为止所尝试的代码:

这只是用于检查其是否有效的示例代码?在我的情况下,我需要处理两个csv文件。

          SparkConf conf = new SparkConf().setAppName("BroadcastVariable").setMaster("local");
          JavaSparkContext ctx = new JavaSparkContext(conf);
          Map<Integer,String> map = new HashMap<Integer,String>();
          map.put(1, "aa");
          map.put(2, "bb");
          map.put(9, "ccc");
          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());

并打印出如下输出:

[{1=aa, 2=bb, 9=ccc}, {1=aa, 2=bb, 9=ccc}, {1=aa, 2=bb, 9=ccc}]

我的要求是:

 [{aa, bb, ccc}]

是否可以按照我要求的方式做到?

1 个答案:

答案 0 :(得分:2)

我使用了JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value().get(x)); JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value());。{/ p>

现在正在工作。