[英]How to merge two RDDs in Spark if value stored at a key matches
可以說我有2個RDDs
:
rdd1 = [ (key1, value1), (key2, value2), (key3, value3) ]
rdd2 = [ (key4, value4), (key5, value5), (key6, value6) ]
而且,我僅當且僅當存儲在rdd1的key1中的值==存儲在rdd2的key5中的值時才合並rdds。
我將如何使用Java或Scala在Spark中進行操作?
我認為您正在尋找加入。
您需要做的第一件事就是將它們映射到PairRDD,並以key1,key2等作為鍵。 本示例使用Tuple2作為輸入:
JavaPairRDD<Integer, String> pairRdd = rdd.mapToPair(new PairFunction<Tuple2<Integer, String>, Integer, String>() {
public Tuple2<Integer, String> call(Tuple2<Integer, String> val) throws Exception {
return new Tuple2<Integer, String>(val._1(), val._2());
}
});
映射完兩者后,只需按以下鍵即可將它們加入:
JavaPairRDD<Integer, Tuple2<String, String>> combined = pairRdd.join(pairRdd2);
然后,合並將類似於:
[ (key1, (value1, value5)), (key2, (value2, value4)) ]
其中key1 == key5和key2 == key4
我給你的解決方案如下
scala> val rdd1 = sc.parallelize(List((3,"s"),(2,"df"),(1,"i")))
scala> val rdd2 = sc.parallelize(List((1,"ds"),(2,"h"),(1,"i")))
scala> val swaprdd1=rdd1.map(_.swap)
scala> val swaprdd2=rdd2.map(_.swap)
scala> val intersectrdd = rdd1.intersection(rdd2)
scala> val resultrdd = intersectrdd.map(_.swap)
我希望它對您的解決方案有所幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.