使用hadoop map reduce获取最高工资员工姓名

mnemlml8  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(491)

我对m/r程序非常陌生。我在hdfs中有一个文件,其中包含这种结构的数据
员工ID,员工姓名,部门,工资,
1231,用户名1,部门15000
1232,用户名2,部门2600
1233,用户名3,部门37000
.
.
.........................
现在我想找出薪水最高的雇员的名字
我写了一个map reduce来寻找最高的薪水
输出。收集(“最大值”,雇员的工资);
在reducer中,我找到了“max value”键的最大值。现在我想在Map器中使用这个值,并找到获得最高工资的员工的姓名。如何将reducer输出作为输入发送到Map器?这是完成任务的一个好方法吗?还有其他建议吗?

ca1c2owp

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)

gk7wooem

gk7wooem2#

我可以建议以下解决方案

1. Find the max salary using your mapreduce job

2. Read the max salary from hdfs (it should be in the file in output folder of your job)

3. Save the max salary two configuration, say `configuration.set("max.salary", maxSalary);`

4. Create new mapper-only job. The mapper of this job should read maxSalary value from the configuration in the setup method and filter out employers with salary equal to the maxSalary in map method. Pass your data to this job.

结果,你会
p、 但作为更好的方法,我建议您使用hive或pig来完成这类任务,因为如果它们不涉及复杂的数学/业务逻辑,那么在hive和pig(以及其他一些)这样的高级工具中实现它们会容易得多。

相关问题