2015-04-16 100 views
0

我试图连接两个pairRDDs如下秀而火花的Java:显示加入RDD

LAT1:K,V - > K-整数,V-双 LAT2:K,V - > K-整数,V-双

JavaPairRDD<Integer,Tuple2<Double,Double>> latlong = lat.join(long); 

我假设新RDD将是K,[V1,V2],我想展示新RDD

并且如果我想基于价值做业务,什么方式来执行

请建议在火花的Java API

PS:我见过很多答案都在Scala中,但我的要求是用Java

回答

2

实现从星火文档:

当联接呼吁的数据集类型(K,V)和(K,W)返回每个键的所有元素对的(K,(V,W))对的数据集。

那么,你是正确的这一假设:

JavaPairRDD<Integer,Tuple2<Double,Double>> latlong = lat.join(long); 

当你需要在JavaPairRDD与价值的工作,你可以使用#mapValues()方法:

传中键 - 每个值值对RDD通过地图功能而不改变按键;这也保留了原始RDD的分区。

要显示JavaPairRDD,您可以使用与通常相同的输出方法e。 G。 #saveAsTextFile()


当你需要在(K, (V, W))值映射到别的东西像(K,V-W)可以用提到mapValues()转型:

JavaPairRDD<Integer, String> pairs = latlong.mapValues(
     new Function<Tuple2<Double, Double>, String>() { 
      @Override 
      public String call(Tuple2<Double, Double> value) throws Exception { 
      return value._1() + "-" + value._2(); 
      } 
     }); 
+0

你可以建议如何改造(K(V,W))变成(K,VW)? – swagath001

+0

我编辑了我的帖子并添加了一个'mapValues()'用法的例子。 – vanekjar