我最近开始在hadoop工作,我刚刚学到了一些关于hadoop的基本理论知识。我正在尝试解决一个任务,其中输入应在文本文件中给出,例如input.txt(1 10 37 5 98 100等)
我需要找到最大的整数在给定的输入(即整数类型)。我尝试在arraylist中传递输入,以便将第一个整数与所有整数的其余部分进行比较(使用for循环)。
1) 这样能找到解决办法吗?如果是,我无法在hadoop中创建arraylist,需要一些提示:-)
2) 我们可以只打印“键”而不打印键值对吗?如果是,请帮助我。我试图在代码减少功能不打印它,但我得到一些错误。
请给我一些建议,让我能继续前进。谢谢您
2条答案
按热度按时间qqrboqgw1#
在Map步骤中,可以将所有数字Map到一个键。然后在reduce步骤中,只需取最大值即可。reduce步骤将为给定键传递一个可iterable的值集合—无需创建自己的arraylist。
mzmfm0qo2#
为此,最好有一个减速机。
为了确保所有数字都到达同一个减速机,您必须做两件事:
为Map器中的所有输入值发出相同的键
将reduce tasks设置为零。
你呢
map()
方法可能如下所示:在你的
Reduce
同学们,有一个财产max
,类似于:Long max
以及reduce()
方法可能如下所示:然后覆盖
run()
当我们超越reduce()
:要将reduce tasks设置为1,请在作业的
run()
,注意这与上述不同run()
:注意:以上所有代码都遵循新的mapreduceapi,我相信使用旧的mapredapi,在reducer完成它的工作之后,我们将无法拥有一个钩子点,因为我们可以通过重写
run()
减速机。