spark中的哪个函数用于按键组合两个RDD

时间:2014-11-13 11:37:24

标签: python scala apache-spark bigdata rdd

我们假设我有以下两个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会在元组内部创建一个元组。但我希望每个键值对只有一个元组。

2 个答案:

答案 0 :(得分:7)

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

rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))

答案 1 :(得分:7)

我会将两个RDD和reduceByKey合并以合并这些值。

(rdd1 union rdd2).reduceByKey(_ ++ _)