我们假设我有以下两个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会在元组内部创建一个元组。但我希望每个键值对只有一个元组。
答案 0 :(得分:7)
只需使用join
,然后使用map
生成的rdd。
rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))
答案 1 :(得分:7)
我会将两个RDD和reduceByKey合并以合并这些值。
(rdd1 union rdd2).reduceByKey(_ ++ _)