我知道spark中有一个groupby实现,但我试图了解它们是如何工作的。 我查看了source code。
我不确切地知道它是仅映射键还是还执行缩减操作。
你将如何实现分组 - 使用map / reduce?
答案 0 :(得分:1)
这个问题有点令人费解。但这是对你的意图的刺痛。
任何(defn fill [v x]
(vec (repeat (count v) x)))
(fill [3 4 2 5 8] 32)
;=> [32 32 32 32 32]
函数 需要aggregate
阶段。 reduce
是这样的聚合函数。实际上groupBy
基本上是最昂贵的聚合函数族。
AFA代码:这里显示清楚:
groupBy
请注意, groupByKey(new HashPartitioner(numPartitions))
总是执行HashPartitioner
:因此您将获得完整的shuffle
(在map / reduce lingo中)操作。
更新 OP要求提供有关reducer-side
如何运作的详细信息。
与Map-Reduce类似,reduce
根据配置的reduce
组合map
阶段的结果 - 评估每条记录的密钥并根据以下内容分配到相应的分区。钥匙。那是Partitioner
阶段。
然后shuffle
逻辑将应用指定的reducer
操作 - 可能还有aggregate
(即基于聚合条件的过滤器)和having
(如果他们是sorting
不是'总'排序)