我想在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)}
谢谢, 南西
答案 0 :(得分:1)
注意:此答案与问题的第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)
答案 1 :(得分:1)
据我所知,只需要一个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