Hadoop基础-MapReduce的Combiner用法案例

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.编写年度最高气温统计

Hadoop基础-MapReduce的Combiner用法案例

  如上图说所示:有一个temp的文件,里面存放的是每年的数据,该数据全部是文本内容,大小2M左右,我已将他放在百度云(链接:https://pan.baidu.com/s/1CEcHAXlII2kKxbn1dmTPKA 密码:jgp0),当你下载后,看到该文件的第15列到19列存放的是年份,而第87列到92列存放的是温度,注意999是无效值,需要排除! 最终测试实验结果如下:

Hadoop基础-MapReduce的Combiner用法案例

  其实这个跟我上次写的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 }
MaxTempMapper.java 文件内容

相关文章: