2016-12-21 10 views
0

Java RDD APIを使用してsparkブロードキャスト変数を処理する必要があります。これはこれまでの私のコードです:Spark Javaのブロードキャスト変数

これは動作するかどうかを確認するためのサンプルコードです。私の場合、私は2つのファイルを処理する必要があります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());を使用しました。

これで作業中です。

関連する問題