两个 RDD 元素的并集

Union of elements of two RDDs

我想在 scala 中合并两个 RDD。我无法将它们中的任何一个存储在内存中,因为它们非常大。

A = {k1->List(A,B,C), k2->List(W,E,Q)}
B = {k1->List(D,E,F), k2->List(E,U,O)}

我怎样才能将 A 和 B 结合起来得到

{(A,B,C,D,E,F),(W,E,Q,U,O)}

谢谢, 南希

注意:此答案与问题的版本 4 匹配。从那以后,问题发生了变化。我没有删除答案,因为有一些关于使用 zip

的陷阱的评论

您可以使用 zip:

val rdd1 = sc.parallelize(Seq("A", "B", "C"))
val rdd2 = sc.parallelize(Seq("D", "E", "F"))

val zipped = rdd1.zip(rdd2)

这导致

scala>zipped.collect().foreach(println)
(A,D)
(B,E)
(C,F)

据我所知,您只需要 join:

val a = sc.parallelize(Seq(
  ("k1" -> List("A", "B" , "C")), ("k2" -> List("W", "E", "Q"))))
val b = sc.parallelize(Seq(
  ("k1" -> List("D", "E", "F")), ("k2" -> List("E", "U", "O"))))

val combined = a.join(b) // Join by key
  .values  // drop keys
  .map{case (x, y) =>  x ++ y} // Combine elements