Hadoop基础-MapReduce的Combiner用法案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.编写年度最高气温统计
如上图说所示:有一个temp的文件,里面存放的是每年的数据,该数据全部是文本内容,大小2M左右,我已将他放在百度云(链接:https://pan.baidu.com/s/1CEcHAXlII2kKxbn1dmTPKA 密码:jgp0),当你下载后,看到该文件的第15列到19列存放的是年份,而第87列到92列存放的是温度,注意999是无效值,需要排除! 最终测试实验结果如下:
其实这个跟我上次写的wordCount如出一辙,只需要稍微改动一下,就可以轻松实现这个统计结果,具体代码如下:
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 4 EMAIL:y1053419035@qq.com 5 */ 6 package cn.org.yinzhengjie.mapreduce.maxtemp; 7 8 import org.apache.hadoop.io.IntWritable; 9 import org.apache.hadoop.io.LongWritable; 10 import org.apache.hadoop.io.Text; 11 import org.apache.hadoop.mapreduce.Mapper; 12 13 import java.io.IOException; 14 15 /** 16 * 我们定义的map端类为MaxTempMapper,它需要继承“org.apache.hadoop.mapreduce.Mapper.Mapper”, 17 * 该Mapper有四个参数,前两个参数是指定map端输入key和value的数据类型,而后两个参数是指定map端输出 18 * key和value的数据类型。 19 */ 20 public class MaxTempMapper extends Mapper<LongWritable,Text,Text,IntWritable> { 21 22 /** 23 * 24 * @param key : 表示输入的key变量。 25 * @param value : 表示输入的value 26 * @param context : 表示map端的上下文,它是负责将map端数据传给reduce。 27 */ 28 @Override 29 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 30 //得到一行数据 31 String line = value.toString(); 32 //得到年份 33 String year = line.substring(15, 19); 34 //得到气温 35 int temp = Integer.parseInt(line.substring(87, 92)); 36 //判断temp不能为9999 37 if (temp != 9999){ 38 //通过上线文将yaer和temp发给reduce端 39 context.write(new Text(year),new IntWritable(temp)); 40 } 41 } 42 }