组合器映射器后运行和减速之前,将作为输入接收由所述映射器实例给定节点上发射的所有数据。 然后发射输出到减速。
而且,如果减少功能既可交换并且关联 ,那么它可以作为一个组合。
我的问题是什么呢短语“ 交换和关联 ”在这种情况下是什么意思?
组合器映射器后运行和减速之前,将作为输入接收由所述映射器实例给定节点上发射的所有数据。 然后发射输出到减速。
而且,如果减少功能既可交换并且关联 ,那么它可以作为一个组合。
我的问题是什么呢短语“ 交换和关联 ”在这种情况下是什么意思?
假设你有号码的列表,1 2 3 4 5 6。
这里联想意味着你可以把你的操作,并把它应用到任何分组,然后将其应用到这些结果,并得到了相同的答案:
(1) + (2 + 3) + (4 + 5 + 6)
==
(1 + 2) + (3 + 4) + (5) + (6)
==
...
想到这里的括号中的组合的执行。
交换指顺序并不重要,所以:
1 + 2 + 3 + 4 + 5 + 6
==
2 + 4 + 6 + 1 + 2 + 3
==
...
例如,另外,符合这个特性,就像前文说到。 “最大”符合上面还有这个属性,因为MAXS的最大值为最大。 MAX(A,B)== MAX(B,A)。
中位数是行不通的例子:中位数的中位数是不是真正的中位数。
不要忘了一个组合的另一个重要特性:输入类型的键/值和输出类型的键/值的需要是相同的。 例如,你不能把一个字符串:int和返回一个字符串:浮动。
很多时候,减速可能输出某种字符串,而不是数值,这可能会阻止您只是在你减速的组合堵塞。
对于交换性,比方说你的减速可以通过功能(在数学术语)表示所谓的F()。 然后你减速是可交换如果f(A,B)= F(B,A)。例如:
对于关联,所述属性是F(F(A,B),C)= F(A,F(B,C))。 例如:
所以在地图的背景/缩小,你减速器必须尊重这两个属性。 例如,如果你的减速只是做一个总和()或MAX(),它尊重这两个属性,但类似均值()或中位数()没有,因此你不能用它作为一个组合。
我个人认为合为小型减速器运行在内存中的映射阶段作为优化后,减少网络流量,以及可交换/关联性其实是有道理的,如果你看到的Map / Reduce是这样的: