在Reducer类中运行和Reduce方法

时间:2014-07-20 19:31:00

标签: hadoop mapreduce

任何人都可以帮我解释一下Reducer类中run()和reduce()方法的执行流程。我正在尝试计算MapReduce作业中字数的平均值。我的Reducer课程收到" word"和"可迭代的事件"作为键值对。

我的目标是计算文档中所有单词的单词出现次数的平均值。 reducer中的run()方法可以迭代所有键并计算所有单词数吗?然后,我可以使用此总和通过循环键提供的每个可迭代值来找到平均值

    import java.io.IOException;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;

    public class AverageReducer extends Reducer<Text, IntWritable, Text,IntWritable>  {

    private IntWritable average = new IntWritable();

    private static int count=0;

    protected void run()
     {
        //loop through all the keys and increment count
     }

   public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException
     {
       int sum=0;
       for(IntWritable val:values)
         {
           sum=sum+val.get();
         }
       average.set(sum/count);
       context.write(key, average);
     }

1 个答案:

答案 0 :(得分:0)

正如here所述,您无法重复两次值。我认为覆盖run方法是个坏主意,它只是遍历密钥并为每对(source)调用reduce方法。因此,您只能使用一个map-reduce作业来计算单词出现次数的平均值。

相关问题