2018-07-25期 MapReduce求部门工资总和及平均工资

1、Mapper类

package cn.sjq.bigdata.mr.salary;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

/**

* 求部门员工薪资总和,部门平均薪资 Map类

* 数据格式:

* SEQ EMPLOYEE_NAME COMPANY_NAME DEPT_NAME SUB_TOTAL COM_FUND_PAYAMT

1 张三 xx有限公司 客户服务中心 5887 798

* @author songjq

*

*/

public class DeptSalaryMapper extends Mapper<LongWritable, Text, Text, Text> {

private Text tkey = new Text();

private Text tvalue = new Text();

/*

* 实现Mapper类map方法

* (non-Javadoc)

* @see org.apache.hadoop.mapreduce.Mapper#map(KEYIN, VALUEIN, org.apache.hadoop.mapreduce.Mapper.Context)

*/

@Override

protected void map(LongWritable key, Text value, Context context)

throws IOException, InterruptedException {

//获取一行

/ 1 张三 xx有限公司 客户服务中心 5887 798

String line = value.toString();

//分词操作

String[] fileds = StringUtils.split(line, ",");

//将数据通过context传送到reduce

//设置部门作为key

tkey.set(fileds[3]);

//设置薪资及公积金作为value

tvalue.set(fileds[4]+","+fileds[5]);

context.write(tkey, tvalue);

}

}

2、Reducer类

package cn.sjq.bigdata.mr.salary;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.io.DoubleWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

/**

* 求部门员工薪资总和,部门平均薪资 Reduce类

* @author songjq

*

*/

public class DeptSalaryReducer extends Reducer<Text, Text, Text, Text> {

private Text tvalue = new Text();

/*

* 实现reducer类的reduce方法

* (non-Javadoc)

* @see org.apache.hadoop.mapreduce.Reducer#reduce(KEYIN, java.lang.Iterable, org.apache.hadoop.mapreduce.Reducer.Context)

*/

@Override

protected void reduce(Text key, Iterable<Text> values, Context ctx)

throws IOException, InterruptedException {

//部门总薪资

float total_sal = 0;

//部门平均薪资

float avg_sal = 0;

//部门总公积金

float tatal_fond = 0;

//部门平均公积金

float avg_fond = 0;

int count = 0;

/*

* 迭代处理values的集合

*/

for(Text v:values) {

//薪资及公积金 [5887,798]

String[] salAry = StringUtils.split(v.toString(), ",");

total_sal+=new Float(salAry[0]).floatValue();

tatal_fond+=new Float(salAry[1]).floatValue();

count++;

}

//求平均工资

avg_sal = total_sal/count;

//求平均公积金

avg_fond = tatal_fond/count;

tvalue.set(","+total_sal+","+avg_sal+","+tatal_fond+","+avg_fond);

ctx.write(key, tvalue);

}

}

3、提交Job主类

package cn.sjq.bigdata.mr.salary;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

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;

/**

* 求部门员工薪资总和,部门平均薪资 Main方法,提交job

* @author songjq

*

*/

public class DeptSalaryMain {

public static void main(String[] args) throws Exception {

//获取一个job实例

Job job = Job.getInstance(new Configuration());

//设置Job入口

job.setJarByClass(DeptSalaryMain.class);

//设置job Mapper类

job.setMapperClass(DeptSalaryMapper.class);

//设置job Reducer类

job.setReducerClass(DeptSalaryReducer.class);

/*

* 设置输出数据类型

*/

job.setMapOutputKeyClass(Text.class);

job.setMapOutputValueClass(Text.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(Text.class);

//设置输入输出路径

FileInputFormat.setInputPaths(job, new Path("D:\\test\\salary\\salary.csv"));

FileOutputFormat.setOutputPath(job, new Path("D:\\test\\salary\\output"));

//提交job

job.waitForCompletion(true);

}

}

原文地址:http://blog.51cto.com/2951890/2150253

时间: 2024-08-30 12:12:28

2018-07-25期 MapReduce求部门工资总和及平均工资的相关文章

武汉市近年社会平均工资(职工平均工资对照表)

年 度 年社会平均工资 月 平 均 1994.07-1995.06 3533 294 1995.07-1996.06 4589 382 1996.07-1997.06 5350 445 1997.07-1998.06 5981 498 1998.07-1999.06 6406 533 1999.07-2000.06 6746 562 2000.07-2001.06 7091 590 2001.07-2002.06 7630 635 2002.07-2003.06 9080 756 2003.07

Oracle求部门员工工资占总工资的比率

--根据每个部门来统计部门工资总和 select deptid, sum(sal) 工资合计 from emp group by deptid; --根据每个部门来统计部门工资总和select deptid, 工资合计, sum(工资合计) over() as 总合计  from (select deptid, sum(sal) 工资合计 from emp group by deptid) x;       select     deptid  部门,        工资合计,        总

6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化

 1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp / 截图: 2 组函数和null在一起 案例:求员工的平均奖金 错误sql: select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3 from emp; 截图: 错误原因: select count(comm

Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一年……我在博客园-_-#,希望用dt的代码燃烧脑细胞,温暖小心窝. 上篇<Hadoop阅读笔记(一)——强大的MapReduce>主要介绍了MapReduce的在大数据集上处理的优势以及运行机制,通过专利数据编写Demo加深了对于MapReduce中输入输出数据结构的细节理解.有了理论上的指导,仍

Schlumberger.Pipesim.2015.1.Full.Win64 1DVD多相流稳态模拟+建造系统Hdshm 2011.07.25 1CD

Schlumberger.Pipesim.2015.1.Full.Win64 1DVD多相流稳态模拟PIPESIM是一款多相流稳态模拟软件,为克服流体流动的挑战和优化生产提供了完美的解决方案.PIPESIM仿真器允许你快速的构建地面设 施直接到GIS地图的画布之上,并自动填充管线准确的高程数据.你可以从一个GIS形状文件自动创建一个网格,或在地图画布上直接数字 化流线. PIPESIM 是集油藏流入动态.单井分析与优化设计.地面管道/设备分析计算.井网/管网分析等为一体的综合分析模拟工具.,它可

饥饿疗法是目前唯一确信能够延缓衰老的办法:4星|《三联生活周刊》2018年3期

三联生活周刊·人类到底能活多久:抗衰老科学指南(2018年3期) 本期主题是抗衰老,科学记者袁越走访了全球抗衰老研究的顶级机构,把这个领域最前沿的进展深入浅出地展现出来,非常有价值.这一类报道也是国内比较稀缺的. 总体评价4星. 以下是书中一些内容的摘抄,#号后面是kindle电子版中的页码,[]中是我根据上下文补充的信息: 1:2016年世界人均一次性能源消费量为1.87吨油当量,中国为2.25吨,相比十几年前还不足1吨有了飞跃,但只相当于经合组织(OECD)4.5吨的一半.OECD目前有34

2018 07 14 题解

2018 07 14 T1 Description给出一个长度为 n 的序列 A,求这个序列的最长上升子序列的长度. HintO(NlogN)模板题,不赘述了 Code #include <set> #include <cmath> #include <queue> #include <cstdio> #include <string> #include <cstring> #include <iostream> #inc

数据库题——高于部门平均工资查询问题

题目:找出高于所在部门平均工资的员工的姓名,工资,所在部门的编号.部门的平均工资 表的结构(表名为sqltest) 1.首先找出每一个部门的平均工资 SELECT AVG(salary) avg_salary ,depart_id FROM sqltest GROUP BY depart_id 得到 2.将其作为暂时表(temp_table).放到主查询中 SELECT sqltest.name,sqltest.salary,temp_table.depart_id,temp_table.avg

查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名

如题: 查询出部门名称.部门的员工数.部门的平均工资.部门的最低收入雇员姓名和最高收入雇员的姓名 这是oracle的默认Scott用户下面的emp 和 dept 表间的一道思考题. 雇员表(emp) 记录了每个雇员的基本信息 NO  字段         类型            描述 1     empno       Number(4)    雇员编号 2     ename       Varchar2(10)      雇员姓名 3     job         Varchar2(9