我编写了一个mapreduce应用程序,其中Map器以以下形式生成输出:
key1 value1
key2 value2
keyn valuen
我要做的是对我的reducer中所有键的所有值求和。基本上:
sum = value1+value2+value3
有可能吗?据我目前所知,每个键/值对分别调用reducer。我想到的一个解决方案是使用一个私有的sum变量来维护迄今为止在其中的值的总和。然而,在这种情况下,我怎么知道所有的对都已经处理好了,这样总和就可以写入收集器了?
2条答案
按热度按时间qcuzuvrc1#
我也是hadoop新手,在研究同一个问题时,我发现mapper和reducer类还有setup()和cleanup()方法以及map()和reduce()。
首先,将减速器的数量设置为1
brccelvz2#
如果你不需要钥匙,那就用一个固定的钥匙。如果必须有多个键值,可以将reducer数设置为1,并使用reducer类中的示例变量来保存所有值的总和。在setup()方法中初始化变量,并在close()方法中报告总总和。
另一种方法是通过在reduce方法中增加一个计数器来写入给定键的值之和。让hadoop将所有值合并到一个计数器值中。