在Hadoop中,Reducer类主要用于对Mapper的输出进行汇总和处理。以下是一个基本的Reducer类的编写示例:
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
在这个例子中,我们定义了一个名为WordCountReducer的Reducer类,它继承了Hadoop的Reducer基类。我们的Reducer接受一个Text类型的键(通常是单词)和一个IntWritable值的可迭代集合(这些值是Mapper为该键生成的所有计数)。Reducer的任务是将这些值相加,以得到该键的总和。
在reduce()方法中,我们首先初始化一个sum变量来存储键的总和。然后,我们遍历传递给reduce()方法的所有值,并将它们添加到sum中。最后,我们将结果设置为result对象,并使用context对象将键和结果写入到Reducer的输出中。
注意:在Hadoop MapReduce中,Reducer的输入是Mapper的输出,即键值对。Reducer的输出是最终的键值对,这些键值对将被写入到Hadoop分布式文件系统(HDFS)中。