簡體   English   中英

如果鍵上存儲的值匹配,如何在Spark中合並兩個RDD

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM