如何将两个rdd组合到spark中的rdd(Python)

时间:2017-10-27 07:07:35

标签: apache-spark pyspark rdd

例如,有两个rdds,例如“rdd1 = [[1,2],[3,4]],rdd2 = [[5,6],[7,8]]”。以及如何将两者结合成这种风格:[[1,2,5,6],[3,4,7,8]]。有什么功能可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您需要使用rdd.zip()基本上将您的rdd组合在一起,并对生成的rdd执行map操作以获得所需的输出:

rdd1 = sc.parallelize([[1,2],[3,4]])
rdd2 = sc.parallelize([[5,6],[7,8]])

#Zip the two rdd together
rdd_temp = rdd1.zip(rdd2)

#Perform Map operation to get your desired output by flattening each element
#Reference : https://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python
rdd_final = rdd_temp.map(lambda x: [item for sublist in x for item in sublist])

#rdd_final.collect()
#Output : [[1, 2, 5, 6], [3, 4, 7, 8]]

您还可以在Databricks笔记本at this link上查看结果。

答案 1 :(得分:0)

使用rdd join实现此目的的另一种(更长)方法:

rdd1 = sc.parallelize([[1,2],[3,4]])
rdd2 = sc.parallelize([[5,6],[7,8]])

# create keys for join
rdd1=rdd1.zipWithIndex().map(lambda (val, key): (key,val))
rdd2=rdd2.zipWithIndex().map(lambda (val, key): (key,val))
# join and flatten output
rdd_joined=rdd1.join(rdd2).map(lambda (key, (val1, val2)): val1+val2)

rdd_joined.take(2)