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

使用hadoop map reduce获取最高工资员工姓名,hadoop,mapreduce,hadoop-partitioning,Hadoop,Mapreduce,Hadoop Partitioning,我对M/R程序非常陌生。我有一个HDFS文件,其中的数据是这种结构 员工ID、员工姓名、部门、工资、 1231,用户名1,Dept15000 1232,用户名2,Dept26000 1233,用户名3,DEPT37000 . . 现在我想找到工资最高的员工的姓名 我已经写了一个MapReduce来寻找最高的薪水。在我的mapper类中,我发出了如下输出 输出。收集(“最大值”,雇员的工资) 在减速机

我对M/R程序非常陌生。我有一个HDFS文件,其中的数据是这种结构

员工ID、员工姓名、部门、工资、

1231,用户名1,Dept15000
1232,用户名2,Dept26000
1233,用户名3,DEPT37000
.
.

现在我想找到工资最高的员工的姓名

我已经写了一个MapReduce来寻找最高的薪水。在我的mapper类中,我发出了如下输出

输出。收集(“最大值”,雇员的工资)


在减速机中,我找到了键“max value”的最大值。现在,我想在映射器中使用此值,并查找赚取最高工资的员工的姓名。。我如何将reducer输出作为输入发送到映射器?这是完成任务的好方法吗?还有其他建议吗?

我会使映射发出最高工资的完整元组。为此,创建一个实现
Writable
接口()的类(值)。也许
TupleWritable
适合您的需要(不太复杂)

因为每个映射将发出1个值,所以网络不是问题,在reducer中接收所有元组数据似乎很好。减速机只需从“最大”值过滤顶部


对于更复杂的问题,您必须考虑链接作业()

我可以建议以下解决方案

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.
因此,您将


另外,作为更好的方法,我建议您在此类任务中使用or,因为如果它们不涉及复杂的数学/业务逻辑,那么在hive和pig(以及其他一些)等高级工具中实现它们会容易得多。

好建议,我已经相应地实现了,并且成功地将最大工资从reducer设置为config对象