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 使用方法和区别

Spark中的treeReduce与reduceByKey

在Spark中关于groupByKey与reduceByKey的区别

Spark/Scala:仅使用 RDD 使用 ReduceByKey 创建嵌套结构