MapReduce编程实例2
MapReduce编程实例:
MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析
MapReduce编程实例(五),MapReduce实现单表关联
实例二,计算学生的平均成绩,每个文件包括所有的学生成绩,格式为 姓名 成绩,有多少个科目,就有多少个输入文件。
如下
小明 23
小强 57
小红 80
小飞 93
小刚 32
小木 99
实现代码:
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.StringTokenizer;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.FloatWritable;
- 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.output.FileOutputFormat;
- import org.apache.hadoop.util.GenericOptionsParser;
- /**
- * 计算学生的平均成绩
- * 学生成绩以每科一个文件输入
- * 文件内容为:姓名 成绩
- * @author daT dev.tao@gmail.com
- *
- */
- public class AverageScore {
- public static class AverageMapper extends Mapper<Object, Text, Text, FloatWritable>{
- @Override
- protected void map(Object key, Text value, Context context)
- throws IOException, InterruptedException {
- String line = value.toString();
- StringTokenizer tokens = new StringTokenizer(line,"\n");
- while(tokens.hasMoreTokens()){
- String tmp = tokens.nextToken();
- StringTokenizer sz = new StringTokenizer(tmp);
- String name = sz.nextToken();
- float score = Float.valueOf(sz.nextToken());
- Text outName = new Text(name);//new新的,set老是不对,具体为什么现在也不太清楚。
- FloatWritable outScore = new FloatWritable(score);
- context.write(outName, outScore);
- }
- }
- }
- public static class AverageReducer extends Reducer<Text, FloatWritable, Text, FloatWritable>{
- @Override
- protected void reduce(Text key, Iterable<FloatWritable> value,Context context)
- throws IOException, InterruptedException {
- float sum = 0;
- int count = 0;
- for(FloatWritable f:value){
- sum += f.get();
- count ++;//shuffle之后肯定是<名字,<成绩1,成绩2,成绩3....>>故一个value肯定是一门学科
- }
- FloatWritable averageScore = new FloatWritable(sum/count);////new新的,set老是不对,具体为什么现在也不太清楚。
- context.write(key, averageScore);
- }
- }
- public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
- System.out.println("Begin");
- Configuration conf = new Configuration();
- String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
- if(otherArgs.length<2){
- System.out.println("please input at least 2 arguments");
- System.exit(2);
- }
- Job job = new Job(conf,"Average Score");
- job.setJarByClass(AverageScore.class);
- job.setMapperClass(AverageMapper.class);
- job.setCombinerClass(AverageReducer.class);
- job.setReducerClass(AverageReducer.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(FloatWritable.class);
- FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
- FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
- System.exit(job.waitForCompletion(true)?0:1);
- System.out.println("End");
- }
- }
配置输入输出参数:
- hdfs://localhost:9000/user/dat/average_score_input hdfs://localhost:9000/user/dat/average_score_output
得到输出结果:
小刚 65.333336
小强 80.333336
小明 48.333332
小木 92.333336
小红 83.333336
小飞 83.0
MapReduce编程实例2的更多相关文章
- MapReduce编程实例6
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
- MapReduce编程实例5
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
- MapReduce编程实例4
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
- MapReduce编程实例3
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
- 三、MapReduce编程实例
前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- MapReduce编程实例
MapReduce常见编程实例集锦. WordCount单词统计 数据去重 倒排索引 1. WordCount单词统计 (1) 输入输出 输入数据: file1.csv内容 hellod world ...
- hadoop之mapreduce编程实例(系统日志初步清洗过滤处理)
刚刚开始接触hadoop的时候,总觉得必须要先安装hadoop集群才能开始学习MR编程,其实并不用这样,当然如果你有条件有机器那最好是自己安装配置一个hadoop集群,这样你会更容易理解其工作原理.我 ...
- Hadoop--mapreduce编程实例1
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
随机推荐
- WebService基于SoapHeader实现安全认证[webservice][.net][安全][soapheader]
摘 自: http://blog.sina.com.cn/s/blog_72b7a82d0100yyp8.html WebService基于SoapHeader实现安全认证[webservice][. ...
- python 将编码转为汉字
print '\u57fa\u7840\u5316\u5de5\u4e1a'.decode('unicode-escape') print urllib.unquote("%C0%FA%CA ...
- ios中Core Location跟Map Kit的基本使用
地图类开发应用中,离不开地理位置跟MKMapView的使用,下面就记录下自己在使用这两个东西中学到的. 不过并不是所有苹果的设备都支持地理位置,我们在使用前应该做个判断,代码如下: BOOL loca ...
- 利用SmtpClient发送邮件
1 163邮箱 HOST:smtp.163.com public static string CreateTimeoutTestMessage(string server) { string Suc ...
- PHP基础知识(二)
Global namespace //看不懂看下面的中文 中英结合看看 When using namespaces, you may find that internal functions(内部( ...
- C#秘密武器之委托
在C#的世界里,委托是无处不在,尤其在.NET自己封装的框架里到处都有其身影,所以掌握委托就很有必要了!那什么是委托呢?其实委托就是一种数据类型,跟int等东东差不多,只不过在使用时要自己先去构建一个 ...
- Git学习笔记一--创建版本库、添加文件、提交文件等
Git,是Linus花了两周时间用C写的一个分布式版本控制系统.牛该怎么定义? 其实,很多人都不care谁写了Git,只在乎它是免费而且好用的!So do I! 下面开始我们的学习: 1.Git安装( ...
- 修改Jenkins的BUILD_NUMBER
因为特殊原因需要修改jenkins的BUILD_NUMBER环境变量,现在将修改方法记录一下, Jenkins ->系统管理->脚本命令行 输入以下脚本,运行就Ok Jenkins.ins ...
- Loadrunner定时执行脚本
# -*- coding: utf-8 -*- import timeimport os #格式为小时,分钟,脚本名称(包括盘符,最好是放在根目录下)#需要把LoadRunner安装路径的Bin加入系 ...
- Ubuntu 下apache2 增加新的module
http://andrew913.iteye.com/blog/398648 首先来介绍下apache的一个工具apxs.apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译 ...