如何在spark(Python)中将两个rdd组合成on rdd
Posted
技术标签:
【中文标题】如何在spark(Python)中将两个rdd组合成on rdd【英文标题】:How to combine two rdd into on rdd in spark(Python) 【发布时间】:2017-10-27 07:07:34 【问题描述】:比如有两个rdd,比如“rdd1 = [[1,2],[3,4]], rdd2 = [[5,6],[7,8]]”。以及如何将两者结合成这种风格:[[1,2,5,6],[3,4,7,8]]。有没有什么功能可以解决这个问题?
【问题讨论】:
Spark Dataset API - join的可能重复 看到这个例子,我认为 join 不起作用,因为我找不到加入的密钥 【参考方案1】:您需要使用 rdd.zip()
将您的 rdds 基本组合在一起,并对生成的 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://***.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 上查看结果。
【讨论】:
感谢 Mohammed Kashif 的帮助!我应该多练习。【参考方案2】:使用 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)
【讨论】:
以上是关于如何在spark(Python)中将两个rdd组合成on rdd的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark 中将两个 DataFrame 与组合列连接起来?
如何在 Spark Streaming 中将 RDD 转换为 DataFrame,而不仅仅是 Spark