Spark:使用 reduceByKey 而不是 groupByKey 和 mapByValues
Posted
技术标签:
【中文标题】Spark:使用 reduceByKey 而不是 groupByKey 和 mapByValues【英文标题】:Spark: use reduceByKey instead of groupByKey and mapByValues 【发布时间】:2015-06-17 14:47:50 【问题描述】:我有一个带有重复值的 RDD,格式如下:
[ key1: A, key1: A, key1: B, key1: C, key2: B, key2: B, key2: D, ..]
我希望新的 RDD 具有以下输出并避免重复。
[ key1: [A,B,C], key2: [B,D], ..]
我已经设法通过以下代码来做到这一点,方法是将值放在一个集合中以消除重复项。
RDD_unique = RDD_duplicates.groupByKey().mapValues(lambda x: set(x))
但我试图用 1 个命令更优雅地实现这一点
RDD_unique = RDD_duplicates.reduceByKey(...)
我还没有想出一个在 reduceByKey 函数中得到相同结果的 lambda 函数。
【问题讨论】:
要删除重复项,您尝试过spark.apache.org/docs/1.1.1/api/python/… 吗? 【参考方案1】:你可以这样做:
data = (sc.parallelize([ key1: A, key1: A, key1: B,
key1: C, key2: B, key2: B, key2: D, ..]))
result = (data
.mapValues(lambda x: x)
.reduceByKey(lambda s1, s2: s1.union(s2)))
【讨论】:
谢谢!做到了:)以上是关于Spark:使用 reduceByKey 而不是 groupByKey 和 mapByValues的主要内容,如果未能解决你的问题,请参考以下文章
在开始取决于reduceByKey结果的连接步骤之前,Spark是不是必须完成reduceByKey步骤中的所有条目的处理?
Spark笔记004-reduceByKey和groupBykey
Spark 中 RDD 算子 ReduceByKey 和 GroupByKey 使用方法和区别