4.3.2 Reduce处理

Map处理的结果会通过partition分发到Reducer, Reducer做完Reduce操作后,将通过OutputFormat输出结果,代码如下:


public static class Reduce

extends Reducer<Text, IntWritable, Text, IntWritable>{

public void reduce(Text key, Iterable<IntWritable>values,

Context context)throws IOException, InterruptedException{

int sum=0;

int count=0;

Iterator<IntWritable>iterator=values.iterator();

while(iterator.hasNext()){

sum+=iterator.next().get();//计算总分

count++;//统计总的科目数

}

int average=(int)sum/count;//计算平均成绩

context.write(key, new IntWritable(average));

}

}


Mapper最终处理的结果<key, value>对会被送到Reducer中进行合并,在合并的时候,有相同key的键/值对会被送到同一个Reducer上。Reducer是所有用户定制Reducer类的基类,它的输入是key及这个key对应的所有value的一个迭代器,还有Reducer的上下文。Reduce处理的结果将通过Reducer.Context的write方法输出到文件中。