Java &引用;映射“输出记录”;在组合器中给出错误值的计数器,当在减速器中使用时,该值为零
我正在尝试获取文件中单词的总数,以便计算每个单词的百分比。我想在一个MapReduce任务中完成这一点 尝试在组合器函数和减缩器函数中使用“映射输出记录”计数器。但结果是不正确的。请在下面找到我的代码: 减速器: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
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,我已请求访问它。您现在可以访问吗?