我正在学习map/reduce,我正在研究计算数据集特定列中所有值的平均值的问题。
到目前为止,我看到的所有解决方案都是按照
的方式进行的。数据集
1
2
3
4
5map job:生成key,value对,key为1
(1,1)
(1、2)
(1、3)
(1、3)
(4)
由于map作业输出的key是相同的,所以它们都将被发送到一个reducer,在那里我们可以进行计算sum/count
然而,我的问题是,对所有条目具有相同的键是直观的吗?map/reduce的目的不是为了拆分作业,以便我们可以让它们并发运行吗?所有地图的输出都使用相同的键难道不会破坏地图/减少的目的吗?
这是计算平均最有效的算法吗?还是可以进一步改进?
映射减少的输入数据将根据输入数据的大小进行分割。每个分割将运行一个映射器,这些映射器将并发运行。一旦所有映射器完成,将根据映射器的输出键触发reducer。reducer的数量可以手动设置,或者默认情况下由partitioner负责。
在您的用例中,您希望计算数据集的平均值,为所有映射器输出提供相同的键将是正确的。如果输入数据集的大小更自动,则会触发多个映射器,并且所有映射器将并发运行。