pyspark将两个rdd合并在一起

时间:2017-03-15 02:21:47

标签: python apache-spark pyspark rdd

我有两个rdd,它们都是groupby的结果,看起来像:

[(u'1', [u'0']), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1'])]

[(u'1', [u'3', u'4']), (u'0', [u'1', u'2'])]

如何合并两者并获得以下内容:

[(u'1', [u'0',u'3', u'4']]), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1']),(u'0', [u'1', u'2'])]

我尝试了join命令,但是这并没有给我我想要的结果。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

我用以下方法解决了它:

rdd2.union(rdd1).reduceByKey(lambda x,y : x+y)

以下任何一项都不适合我:

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

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

祝大家好运。

答案 1 :(得分:0)

data1 = [(u'1', [u'0']), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1'])]
data2 = [(u'1', [u'3', u'4']), (u'0', [u'1', u'2'])]

distData1 = sc.parallelize(data1)
distData2 = sc.parallelize(data2)
distData3 = distData1.leftOuterJoin(distData2)
distData4 = distData3.map(lambda rec : ( rec[0], rec[1][0] + [ ] if rec[1][1] is None else rec[1][1])