Java &引用;映射“输出记录”;在组合器中给出错误值的计数器,当在减速器中使用时,该值为零

Java &引用;映射“输出记录”;在组合器中给出错误值的计数器,当在减速器中使用时,该值为零,java,hadoop,mapreduce,word-count,Java,Hadoop,Mapreduce,Word Count,我正在尝试获取文件中单词的总数,以便计算每个单词的百分比。我想在一个MapReduce任务中完成这一点 尝试在组合器函数和减缩器函数中使用“映射输出记录”计数器。但结果是不正确的。请在下面找到我的代码: 减速器: public void reduce(Text key, Iterable<Text> values, Context context ) throws IOException, Interrupt

我正在尝试获取文件中单词的总数,以便计算每个单词的百分比。我想在一个MapReduce任务中完成这一点

尝试在组合器函数和减缩器函数中使用“映射输出记录”计数器。但结果是不正确的。请在下面找到我的代码:

减速器:

public void reduce(Text key, Iterable<Text> values,
                   Context context
                   ) throws IOException, InterruptedException {
  int sum = 0;
  int count = 0;
  for (Text val : values) {
    String str[] = (val.toString()).split(" ");
    count += Integer.parseInt(str[0]);
    sum += Integer.parseInt(str[1]);
  }
  result.set(sum+" "+count);
  System.out.println("All value "+context.getConfiguration().getLong("All",0));
  context.write(key, result);
  System.out.println("Setup value "+context.getCounter("org.apache.hadoop.mapred.Task$Counter",  "MAP_OUTPUT_RECORDS").getValue());
}
public void reduce(文本键、Iterable值、,
语境
)抛出IOException、InterruptedException{
整数和=0;
整数计数=0;
用于(文本值:值){
字符串str[]=(val.toString()).split(“”);
count+=Integer.parseInt(str[0]);
sum+=Integer.parseInt(str[1]);
}
结果集(总和+“”+计数);
System.out.println(“全部值”+context.getConfiguration().getLong(“全部”,0));
编写(键、结果);
System.out.println(“设置值”+context.getCounter(“org.apache.hadoop.mapred.Task$Counter”,“映射输出记录”).getValue();
}
我在这里得到的结果是一些与总计数无关的数字:

输出:

设置值0
设置值0
设置值0
设置值0

期望值:映射输出记录=50338

组合器:

public static class IntSumCombiner
     extends Reducer<Text,Text,Text,Text> {
  private Text result = new Text();

  public void reduce(Text key, Iterable<Text> values,
                     Context context
                     ) throws IOException, InterruptedException {
    int count = 0;
    int sum = 0;
    for (Text val : values) {
      String str[] = (val.toString()).split(" ");
      count += Integer.parseInt(str[0]);
      sum += Integer.parseInt(str[1]);
    }

    result.set(count+" "+sum);
    context.write(key, result);
    System.out.println("Setup value"+context.getCounter("org.apache.hadoop.mapred.Task$Counter","MAP_OUTPUT_RECORDS").getValue());
  }
}
公共静态类IntSumCombiner
伸缩减速机{
私有文本结果=新文本();
public void reduce(文本键、Iterable值、,
语境
)抛出IOException、InterruptedException{
整数计数=0;
整数和=0;
用于(文本值:值){
字符串str[]=(val.toString()).split(“”);
count+=Integer.parseInt(str[0]);
sum+=Integer.parseInt(str[1]);
}
结果集(计数+“”+总和);
编写(键、结果);
System.out.println(“设置值”+context.getCounter(“org.apache.hadoop.mapred.Task$Counter”,“映射输出记录”).getValue();
}
}
输出:

设置值14296
设置值14296
设置值14296
设置值14296


期望值:映射输出记录=50338

是否可以粘贴所有计数器?此外,最好粘贴整个代码、映射器、减速机、作业配置等。请在此处查找所有计数器值:这是代码的链接:请访问google drive,我已请求访问它。您现在可以访问吗?