在Spark中加入两个RDD,然后消除密钥

时间:2017-06-13 18:22:06

标签: java apache-spark rdd

我有两个RDD,其结构如下:

rdd1<String, String>: (str01, str12), (str01, str13), (str02, str13), ..  
rdd2<String, Float>: (str01, 0.1), (str02, 0.3), ..  

我想加入这些RDD以获得一个新的RDD,其中rdd1中的str01,str02被它们在rdd2中的值替换,如下所示:

rdd3<String, Float>: (str12, 0.1), (str13, 0.1), (str13, 0.3)  

然后我需要通过键减少这个RDD,如下所示:

rdd4<String, Float>: (str12, 0.1), (str13, 0.1+0.3 = 0.4)  

我试过左右外连接,但以RDD结束 知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这有助于解决您的问题。

val map1=List("str01" -> "str12", "str01" -> "str13", "str02" -> "str13")
val map2=List("str01"->0.1, "str02"->0.3)

val rdd1=sc.parallelize(map1)
val rdd2=sc.parallelize(map2)

val joinedrdd = rdd1.join(rdd2).map(x=> x._2)
val r = joinedrdd.reduceByKey(_+_)

此rdd r的结构为:RDD[(String, Double)]