我有一个关于同时加入多个rdd的问题。我有大约8个数据类型的配对rdds:RDD [(String,mutable.HashSet [String])]。我想通过钥匙加入他们。我可以使用spark的加入或cogroup加入2吗? 但是,有没有内置的方法来做到这一点?我可以一次加入两个,然后将结果rdd与下一个加入,但是如果有更好的方法,那就想使用它。
答案 0 :(得分:1)
没有内置方法可以连接多个RDD。假设此问题与the previous one相关,并且您希望为每个键组合集合,则只需使用union
后跟reduceByKey
:
val rdds = Seq(rdd1, rdd2, ..., rdd8)
val combined: RDD[(String, mutable.HashSet[String])] = sc
.union(rdds)
.reduceByKey(_ ++ _)
如果没有,你可以尝试减少一组RDD:
val combined: RDD[(String, Seq[mutable.HashSet[String]])] = rdds
.map(_.mapValues(s => Seq(s)))
.reduce((a, b) => a.join(b).mapValues{case (s1, s2) => s1 ++ s2})