我有两个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结束 知道如何解决这个问题吗?
答案 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)]