Hadoop基础-Map端链式编程之MapReduce统计TopN示例
Hadoop基础-Map端链式编程之MapReduce统计TopN示例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.项目需求
对“temp.txt”中的数据进行分析,统计出各个年份(第15~19列)总排行前十的最高气温(第87~92列),由于博客园无法上传大文件的文本,因此我把该文本的内容放在博客园的另一个链接了(需要的戳我)。,如果网页打不开的话也就可以去百度云盘里下载副本,链接:链接:https://pan.baidu.com/s/12aZFcO2XoegUGMAbS--n6Q 密码:7n91。
二.代码实现
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.mrchain; 7 8 import org.apache.hadoop.io.WritableComparable; 9 10 import java.io.DataInput; 11 import java.io.DataOutput; 12 import java.io.IOException; 13 14 public class CompKey implements WritableComparable<CompKey> { 15 16 private String year; 17 private int temp; 18 /** 19 * 重写CompKey对年份和气温排序 20 */ 21 public int compareTo(CompKey o) { 22 if(this.getYear().equals(o.getYear())){ 23 return o.getTemp() - this.getTemp(); 24 } 25 return this.getYear().compareTo(o.getYear()); 26 27 } 28 29 public void write(DataOutput out) throws IOException { 30 out.writeUTF(year); 31 out.writeInt(temp); 32 33 } 34 35 public void readFields(DataInput in) throws IOException { 36 year = in.readUTF(); 37 temp = in.readInt(); 38 39 } 40 41 public String getYear() { 42 return year; 43 } 44 45 public void setYear(String year) { 46 this.year = year; 47 } 48 49 public int getTemp() { 50 return temp; 51 } 52 53 public void setTemp(int temp) { 54 this.temp = temp; 55 } 56 57 @Override 58 public String toString() { 59 return year + ' ' +temp ; 60 } 61 }
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.mrchain; 7 8 import org.apache.hadoop.io.WritableComparable; 9 import org.apache.hadoop.io.WritableComparator; 10 11 public class MyGroupComparator extends WritableComparator { 12 13 public MyGroupComparator() { 14 super(CompKey.class,true); 15 } 16 17 public int compare(WritableComparable a, WritableComparable b) { 18 CompKey ck1 = (CompKey) a; 19 CompKey ck2 = (CompKey) b; 20 return ck1.getYear().compareTo(ck2.getYear()); 21 } 22 }