我对m/r程序非常陌生。我在hdfs中有一个文件,其中包含这种结构的数据
员工ID,员工姓名,部门,工资,
1231,用户名1,部门15000
1232,用户名2,部门2600
1233,用户名3,部门37000
.
.
.........................
现在我想找出薪水最高的雇员的名字
我写了一个map reduce来寻找最高的薪水
输出。收集(“最大值”,雇员的工资);
在reducer中,我找到了“max value”键的最大值。现在我想在Map器中使用这个值,并找到获得最高工资的员工的姓名。如何将reducer输出作为输入发送到Map器?这是完成任务的一个好方法吗?还有其他建议吗?
2条答案
按热度按时间ca1c2owp1#
我会让Map发出最大工资的完整元组。为此,创建一个实现
Writable
接口(http://hadoop.apache.org/docs/r1.2.0/api/org/apache/hadoop/io/writable.html). 也许 吧TupleWritable
适合你的需要(不太复杂)。因为每个Map将有1个值,所以网络不是问题,在reducer中接收所有元组数据似乎很好。你的减速机只需要从“最大”值中过滤出顶部。
对于更复杂的问题,您必须考虑链接作业(http://developer.yahoo.com/hadoop/tutorial/module4.html#chaining)
gk7wooem2#
我可以建议以下解决方案
结果,你会
p、 但作为更好的方法,我建议您使用hive或pig来完成这类任务,因为如果它们不涉及复杂的数学/业务逻辑,那么在hive和pig(以及其他一些)这样的高级工具中实现它们会容易得多。