在Reducer类中运行和减少方法



有谁能帮我解释一下Reducer类中run()和reduce()方法的执行流程吗?我试图计算我的MapReduce工作的平均字数。我的Reducer类接收"word"one_answers"iterable of occurrences"作为键值对。

我的目标是计算相对于文档中所有单词的单词出现的平均值。可以运行()方法在减速机迭代通过所有的键和计数所有的字的数量?然后,通过循环遍历键

提供的每个可迭代值,我可以使用这个和来找到平均值。
    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);
     }

正如这里所描述的,您不能对值进行两次迭代。我认为覆盖run方法是坏主意,它只是通过键迭代并为每对(源)调用reduce方法。因此,您无法仅通过一个map-reduce作业来计算单词出现的平均值。

相关内容

  • 没有找到相关文章

最新更新