两个 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
我想在 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