RDD join:加入两个不同的RDD后,生成的RDD键值和顺序发生了变化?

时间:2015-05-02 23:21:23

标签: java join apache-spark rdd

我有两对RDD,比如说

astype

现在使用join

加入这些RDD
 RDD1 : [(1,a),(2,b),(3,c)]    
 RDD2 : [(1,d),(2,e),(3,f)]

我已经在RDD3中显示了以下代码

的元素
 RDD3 = RDD1.join(RDD2);

我见过像

这样奇怪的结果
 for(Tuple2<Integer,Tuple2<String,String>> tuple : RDD3.collect()) 
                      System.out.println(tuple._1()+":"+tuple._2()._1()+","+tuple._2()._2());

像我预期的那样

5:b,e
4:a,d 
6:c,f

有没有办法获得如上所述的所需输出? 或者错误地解释RDD行为?请建议

编辑:

其实我正在读这样的数据

1:a,d
1:b,e 
1:c,f

然后

JavaDoubleRDD data1 = sc.parallelizeDoubles(Arrays.asList(45.25,22.15,33.24));
JavaDoubleRDD data2 = sc.parallelizeDoubles(Arrays.asList(23.45,19.35,12.45));

所以我们正在做的是根据纬度和经度值计算权重矩阵

2 个答案:

答案 0 :(得分:3)

当我这样做时:

scala> val rdd1 = sc.parallelize(Array((1,"a"),(2,"b"),(3,"c")))
scala> val rdd2 = sc.parallelize(Array((1,"d"),(2,"e"),(3,"f")))
scala> val rdd3 = rdd1.join(rdd2)
scala> rdd3.toArray.foreach(println(_))

我一直得到:

(1,(a,d))
(2,(b,e))
(3,(c,f))

答案 1 :(得分:0)

这就是我尝试的预期结果:

val data1 = sc.parallelize(Array((1,"a"),(2,"b"),(3,"c")))
val data2 = sc.parallelize(Array((1,"d"),(2,"e"),(3,"f")))
val data3 = data1.join(data2)
data3.collect().map(tuple => tuple._1 + ":"+tuple._2._1+","+tuple._2._2).foreach(println(_))

获得:

1:a,d
2:b,e
3:c,f

所以这是scala。我想在Java中应该是相同的输出。