使用MapReduce列出工资最高的头三名员工姓名及其工资详解大数据
数据 使用 详解 及其 员工 最高 MapReduce 工资
2023-06-13 09:20:27 时间
问题分析
求工资最高的头三名员工姓名及工资,可以通过冒泡法得到。在Mapper阶段输出经理数据和员工对应经理表数据,其中经理数据key为0值、value为”员工姓名,员工工资”;最后在Reduce中通过冒泡法遍历所有员工,比较员工工资多少,求出前三名。
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; public class Q8SalaryTop3Salary extends Configured implements Tool { public static class MapClass extends Mapper LongWritable, Text, IntWritable, Text { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] kv = value.toString().split( , // 员工姓名,工资 context.write(new IntWritable(0), new Text(kv[1].trim() + , + kv[5].trim())); } } public static class Reduce extends Reducer IntWritable, Text, Text, Text { public void reduce(IntWritable key, Iterable Text values, Context context) throws IOException, InterruptedException { String empName; String firstEmpName = String secondEmpName = String thirdEmpName = long empSalary = 0; long firstEmpSalary = 0; long secondEmpSalary = 0; long thirdEmpSalary = 0; for (Text val : values) { empName = val.toString().split( , )[0]; empSalary = Long.parseLong(val.toString().split( , )[1]); if(empSalary firstEmpSalary) { thirdEmpName = secondEmpName; thirdEmpSalary = secondEmpSalary; secondEmpName = firstEmpName; secondEmpSalary = firstEmpSalary; firstEmpName = empName; firstEmpSalary = empSalary; } else if (empSalary secondEmpSalary) { thirdEmpName = secondEmpName; thirdEmpSalary = secondEmpSalary; secondEmpName = empName; secondEmpSalary = empSalary; } else if (empSalary thirdEmpSalary) { thirdEmpName = empName; thirdEmpSalary = empSalary; } } context.write(new Text( First employee name: + firstEmpName), new Text( Salary: + firstEmpSalary)); context.write(new Text( Second employee name: + secondEmpName), new Text( Salary: + secondEmpSalary)); context.write(new Text( Third employee name: + thirdEmpName), new Text( Salary: + thirdEmpSalary)); } } @Override public int run(String[] args) throws Exception { Job job = new Job(getConf(), Q8SalaryTop3Salary job.setJobName( Q8SalaryTop3Salary job.setJarByClass(Q8SalaryTop3Salary.class); job.setMapperClass(MapClass.class); job.setReducerClass(Reduce.class); job.setMapOutputKeyClass(IntWritable.class); job.setMapOutputValueClass(Text.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputKeyClass(Text.class); job.setOutputFormatClass(TextOutputFormat.class); job.setOutputValueClass(Text.class); String[] otherArgs = new GenericOptionsParser(job.getConfiguration(), args).getRemainingArgs(); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); job.waitForCompletion(true); return job.isSuccessful() ? 0 : 1; } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new Q8SalaryTop3Salary(), args); System.exit(res); } }
用于计算的基础数据请参考:http://blog.ytso.com/post/17840.html
9815.html
分布式文件系统,分布式数据库区块链并行处理(MPP)数据库,数据挖掘开源大数据平台数据中台数据分析数据开发数据治理数据湖数据采集相关文章
- 写表单你还在复制粘贴吗?推荐你使用基于Vant-UI二次封装的数据驱动式表单自动生成组件
- 海量订单系统微服务开发:使用MongoDB支持海量数据
- R语言使用Rasch模型分析学生答题能力|附代码数据
- 【Flask】大型项目中对于url_for() 的使用以及请求数据上传文件的开发实例
- 【Android 应用开发】分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采集真实数据统计
- 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 完整流程演示 | 查找临时内存地址 | 查找真实指针地址 )
- Python的Flask框架使用Redis做数据缓存的配置方法
- mysql 使用inet_aton和inet_ntoa处理ip地址数据详解数据库
- oracle使用sequence批量写数据详解数据库
- ZooKeeper学习之路 (五)ZooKeeper API的简单使用 增删改查详解大数据
- Hive二 Hive基本使用详解大数据
- 使用Redis保存Spring session(基于XML配置文件)详解大数据
- Libsvm的使用详解大数据
- hadoop入门:hadoop使用shell命令总结详解大数据
- 如何使用Hadoop进入大数据库时代详解大数据
- Jedis连接池的使用详解大数据
- Mongodb 的基本使用详解大数据
- 使用MapReduce求各个部门的总工资详解大数据
- 使用MapReduce求各个部门的人数和平均工资详解大数据
- 如何使用hibernate存取clob和blob类型数据详解编程语言
- java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)详解编程语言
- 使用RMAN在Linux上恢复数据(rmanlinux)
- 数据处理利用Oracle解决数据刷新难题(oracle刷新)
- push使用MongoDB数组push添加数据(mongodb数组)
- 使用MySQL实现网页数据存储与访问(mysql网页访问)
- 如何使用MySQL在网页上显示数据(mysql页面显示)
- 台设计使用SQLServer前端设计实现数据可视化(sqlserver编辑前)
- Redis使用深入解析——快速实现数据存储与读取(redis使用详解)
- 数据使用CMD命令备份Oracle数据库(cmd oracle备份)
- 使用Oracle快速实现凭证数据导入(oracle 中凭证导入)
- ThinkPHP中使用ajax接收json数据的方法