2016-12-21 57 views
0

我需要使用Java RDD API處理Spark廣播變量。這是我迄今試過的代碼:訪問Spark java中的廣播變量

這只是示例代碼來檢查其作品與否?在我的情況下,我需要處理兩個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

我用JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value().get(x)); insted JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value());

它現在工作。