在 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】:

下面的作品。在适当的地方使用tupleslist 而不是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分区

Spark分区

如何在 Spark 中将两个 DataFrame 与组合列连接起来?

如何在 Spark .NET 中执行分布式组合(N 选择 K)?

The 65rd Spark Club Meeting

The 63rd Spark Club Meeting:Destiny