MapReduce—平均工资
MapReduce—平均工资
- MapReduce—平均工资
- 1. 需求分析
- 2. 解答思路
MapReduce—平均工资
我这里是使用集群去处理这个日志数据,数据在我的github上,默认使用maven去管理所有的jar包
- github地址
1. 需求分析
按照所给数据文件去统计每个部门的人数,最高工资,最低工资和平均工资
需求统计的日志数据如下:
需要将每个部门的人数,工资进行统计。比如10号部门有3个人,最高工资是5000元,最低工资是1300元,平均工资是2916.666666666667元。则以如下形式进行显示:
10 3 5000 1300 2916.666666666667
2. 解答思路
1.因为要统计部门的人数以及工资,那么在最后的reduce阶段,进行汇总时,可以设置一个计数器,在进行汇总时,就可以计算出部门人数,所以,我们只需要日志数据中的两列,分别是部门编号和工资,将部门编号作为key,工资作为value2.在reduce输出阶段,因为要输出人数,最高工资,最低工资和平均工资,一共四列,所以需要将计算出的结果拼接成一个Text进行输出3.在处理过程中我使用Partitioner将数据分开通过不同的reduce去处理4.如果需要本地运行,记得注释掉avgsal文件中的23/24/25行,并将47行和50行的文件路径修改为自己所使用的文件路径5.因为在数据扭转的过程中,<K2, V2>和<K3, V3>的数据类型发生了变化,所以要在avgsal中设置map端所输出的数据类型,也就是要指定<K2, V2>的数据类型
mapper端代码
package com.yangqi.avgsal;import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** @author xiaoer* @date 2019/11/12 12:44*/
public class MyMapper extends Mapper<LongWritable, Text, IntWritable, DoubleWritable> {IntWritable num = new IntWritable();DoubleWritable result = new DoubleWritable();/*** 针对每一行的数据,都会执行一次下面的map方法** @param key* @param value* @param context* @throws IOException* @throws InterruptedException*/@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] split = line.split(",");String str1 = split[split.length - 1];String str2 = split[split.length - 3];num.set(Integer.parseInt(str1));result.set(Double.parseDouble(str2));context.write(num, result);}
}
reduce端代码
package com.yangqi.avgsal;import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** @author xiaoer* @date 2019/11/12 12:47*/
public class MyReducer extends Reducer<IntWritable, DoubleWritable, IntWritable, Text> {Text result = new Text();@Overrideprotected void reduce(IntWritable key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {// 记录部门的人数int num = 0;// 记录部门的工资和double sum = 0;// 记录最大工资double max = Double.MIN_VALUE;// 记录最小工资double min = Double.MAX_VALUE;for (DoubleWritable value : values) {num++;sum += value.get();if (max < value.get()) {max = value.get();}if (min > value.get()) {min = value.get();}}// 将结果进行拼接,拼接成Text进行输出String str = "\t" + num + "" + "\t" + max + "" + "\t" + min + "\t" + (sum / num);result.set(str);// 以<K3, V3>形式进行写出context.write(key, result);}
}
partitioner端代码
package com.yangqi.avgsal;import org.apache.hadoop.mapreduce.Partitioner;/*** @author xiaoer* @date 2019/11/13 11:54*/
public class MyPartitioner<K, V> extends Partitioner<K, V> {public int getPartition(K key, V value, int numPartitions) {int emp = Integer.parseInt(key.toString());if (emp == 10 || emp == 30) {return 0;} elsereturn 1;}
}
avgsal
package com.yangqi.avgsal;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;/*** @author xiaoer* @date 2019/11/12 12:50*/
public class AvgSal {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 获取配置对象:读取四个默认配置文件Configuration conf = new Configuration();System.setProperty("HADOOP_USER_NAME", "hadoop");conf.set("mapreduce.app-submission.cross-platform", "true");conf.set("mapred.jar", "AvgSal/target/AvgSal-1.0-SNAPSHOT.jar");FileSystem fs = FileSystem.get(conf);// 创建Job实例对象Job job = Job.getInstance(conf, "avgsal");// 用于指定驱动类型job.setJarByClass(AvgSal.class);// 用于指定Map阶段的类型job.setMapperClass(MyMapper.class);// 用于指定Reduce阶段的类型job.setReducerClass(MyReducer.class);job.setNumReduceTasks(2);// 设置Partition的类型job.setPartitionerClass(MyPartitioner.class);job.setMapOutputKeyClass(IntWritable.class);job.setMapOutputValueClass(DoubleWritable.class);// 设置K3的输出类型job.setOutputKeyClass(IntWritable.class);// 设置V3的输出类型job.setOutputValueClass(Text.class);// 设置要统计的文件的路径FileInputFormat.addInputPath(job, new Path("/emp"));// FileInputFormat.addInputPath(job, new Path(args[0]));// 设置文件的输出路径Path path = new Path("/output");// Path path = new Path(args[1]);if (fs.exists(path)) {fs.delete(path, true);}FileOutputFormat.setOutputPath(job, path);// 等到作业执行,并退出System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
MapReduce—平均工资相关推荐
- SQL-54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
题目描述 查找排除当前最大.最小salary之后的员工的平均工资avg_salary. CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `sa ...
- 查询出每个部门比本部门平均工资高的职工人数
这句话,我裂开了. 部门表dept如下: 员工表emp如下: 我感觉有两种理解. 1.找出部门内,工资高于平均工资的员工数 with temp(avg_sal,deptno) as (select a ...
- 2019宁波本科计算机招聘工资,@宁波人,76282!2019年度平均工资是这么多,你拖后腿了吗?...
原标题:@宁波人,76282!2019年度平均工资是这么多,你拖后腿了吗? 今天,宁波市统计局发布2019年宁波市平均工资, 我市全社会单位就业人员年平均工资76282元,高于全省4759元.一起来看 ...
- 2020年2月全国程序员工资统计,平均工资13716元,你被平均了吗?
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 来自| CSDN 作者 | 有数可据 https://blog.csdn.ne ...
- 2021年6月程序员平均工资 15052,你给行业拖后腿了吗?
上周我们发布了一篇名为<2021年6月程序员工资统计,平均15052元>的文章,引起了网友们的广泛讨论. 据文章中调查结果显示,"2021年6月全国招收程序员435501人,平均 ...
- 程序员真香!IT 业 2020 年平均工资最高
整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 5月19日,国家统计局发布2020年平均工资数据,随后,相关话题便冲上微博热搜. 程序员真香! 据国家统计局发布的数据显示,20 ...
- SQL-16 统计出当前各个title类型对应的员工当前薪水对应的平均工资。结果给出title以及平均工资avg。...
题目描述 统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg. CREATE TABLE `salaries` ( `emp_no` int(11) N ...
- 7月平均工资下来,Java程序员哭笑不得!
2020 魔幻开局,不少企业开始缩减招聘名额,更别说涨薪了!据第三方统计,今年 7 月程序员平均工资为 14357 元.作为第一编程语言的 Java,平均工资 14448 元(6 月为 14433 元 ...
- python平均工资-2019年我国程序员薪资统计,看看你出于什么水平?
主要城市程序员工资 2019年9月北京招收程序员26430人.2019年9月北京程序员平均工资17224元,工资中位数15000元,其中95%的人的工资介于3750元到45000元. 2019年9月上 ...
- python平均工资-2020 10大薪资最高的IT编程语言排名
坊间流传一句俗语: 三百六十行,行行转IT. IT行业自2016年首次超过金融行业以后,一直到现在每年都是稳居高薪第1名的宝座. 本文盘点了2020 10大薪资最高的IT编程语言排名,看看是哪些编码技 ...
最新文章
- java类的注释模板_IDEA添加Java类注释模版的方法
- 数据中心100G主流应用技术分析与市场预测
- HighNewTech:支付宝全球首发5G手机,四大逆天功能(防骗三折叠气味识别自由飞)!
- WIN32开发:如何获取父进程的ID
- 简述python程序执行原理_Python程序的执行原理(1)
- linux 后端的进程,linux后台启动进程
- rest api如何创建_REST:创建资源
- 微服务学习之Gateway服务网关【Hoxton.SR1版】
- java 判断是否为车牌_java车牌检测识别库
- java面试题(分布式篇)
- photoshop Mac版本安装
- 基于融云直播 SDK,快速实现连麦布局(内附代码)
- Echarts3柱状图切换折线图时发生位移
- 两种方法模仿支付宝进入到后台界面模糊
- python中找不到模块_安装完Python包然后找不到模块的解决步骤
- 仿真 steam linux 安装教程,Ubuntu安装Steam游戏平台的解决方案
- 8421码到5421码的转换_8421BD码转换成5421BCD码.doc
- python格式化输出
- AI 作图绘画的软件和网址
- [开心幽默]一对北京情侣是如何吵架的 !(暴笑)