加入多个pairedrdds

时间:2015-08-31 15:19:57

标签: scala apache-spark

我有一个关于同时加入多个rdd的问题。我有大约8个数据类型的配对rdds:RDD [(String,mutable.HashSet [String])]。我想通过钥匙加入他们。我可以使用spark的加入或cogroup加入2吗? 但是,有没有内置的方法来做到这一点?我可以一次加入两个,然后将结果rdd与下一个加入,但是如果有更好的方法,那就想使用它。

1 个答案:

答案 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})