在 python Spark 中组合 2 个 RDD
Posted
技术标签:
【中文标题】在 python Spark 中组合 2 个 RDD【英文标题】:Combining 2 RDDs in python Spark 【发布时间】:2017-06-22 01:41:23 【问题描述】:我有 2 个 RDD。假设 rdd1 = 'a','b','c', 'a', 'c', 'a' 并且 rdd2 是具有如下集群分配的 KMeans 的输出 -> rdd2=0,0,1 ,1,1,0。我想最终找出集群 0 和 1 中有多少个 a 和 b。例如,0 有 2 个 a,所以类似于 0、a、2 等。有没有办法将这 2 个 RDDS 组合起来做这样一个操作?
感谢您的帮助。
【问题讨论】:
澄清一下,您要查找的是 0/a/2、1/a/1、0/b/1、1/c/2、我的理解正确吗? 是的,没错。 【参考方案1】:下面的作品。在适当的地方使用tuples
和list
而不是set
。
rdd1 = sc.parallelize(['a','b','c', 'a', 'c', 'a'])
rdd2 = sc.parallelize([0, 0, 1, 1, 1, 0])
rdd = rdd1.zip(rdd2).map(lambda x: (x,1)).reduceByKey(lambda x,y: x+y).map(lambda ((x1,x2),y): (x1,x2,y))
rdd.collect()
输出:
[('a', 0, 2), ('b', 0, 1), ('c', 1, 2), ('a', 1, 1)]
【讨论】:
如果这是一个特别大的数据集,最好使用reduceByKey
而不是groupBy
,然后是map
。
@JoeC 感谢您的建议。我已经更新了答案
非常感谢@JoeC 的建议。以上是关于在 python Spark 中组合 2 个 RDD的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark 中将两个 DataFrame 与组合列连接起来?