MapReduce框架在记录到达reduce之前按key进行记录排序,但是建所对应的值并没有排序。甚至在不同的执行轮次中,这些值的排序也是不固定的,应为它们
来自不同的map任务且不同的map任务在不同的轮次中完成的时间也是不同的,一般来说,大多数MapReduce程序会避免reduce函数依赖于值进行排序,需要
通过特定的方法对键进行排序和分组实现对值得排序。
下面以统计每年的最高气温为例进行示例:
注意:源文件是一个sequenceFile序列文件<IntWritable, IntWritable>
1、自定义组合comkey
package hadoop.mr.sort.secondary;
import org.apache.hadoop.io.WritableComparable;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
/**
* 组合key
*/
public class CombKey implements WritableComparable<CombKey>{
public int year ;
public int temp ;
public int compareTo(CombKey o) {
int oyear = o.year ;
int otemp = o.temp ;
//同一年份
if(year == oyear){
ret