20

假设我有以下两个 RDD,具有以下密钥对值。

rdd1 = [ (key1, [value1, value2]), (key2, [value3, value4]) ]

rdd2 = [ (key1, [value5, value6]), (key2, [value7]) ]

现在,我想通过键值加入它们,例如我想返回以下内容

ret = [ (key1, [value1, value2, value5, value6]), (key2, [value3, value4, value7]) ] 

在使用 Python 或 Scala 的 spark 中,我该如何做到这一点?一种方法是使用 join,但 join 会在元组内创建一个元组。但我希望每个键值对只有一个元组。

4

2 回答 2

8

只需使用join然后map生成的rdd。

rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))
于 2014-11-13T16:21:35.133 回答
8

我会将这两个 RDD 合并到一个 reduceByKey 来合并这些值。

(rdd1 union rdd2).reduceByKey(_ ++ _)
于 2014-11-14T12:41:00.480 回答