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方法输出到文件中。