我目前正在做一个项目,要求我接受许多不同的职位和工资,并计算每个职位的平均值。我已经用Java设置了我的Driver,Mapper和Reducer,但似乎无法弄清最后一部分。
Mapper将正确的数据发送到reducer,但是每当我似乎让Reducer处于良好状态并且不产生错误时,它就不会输出任何数据:例如
File Input Format Counters
Bytes Read=259698
File Output Format Counters
Bytes Written=0
这是我为减速器准备的原始代码,但无法使用:
Text category;
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{
int count = 0;
int avgWage = 0;
int avgCount = 0;
int avgTotal = 0;
for (IntWritable value:values){
if(count == 0){
category = key;
}
if(category != key){
avgWage = avgTotal/avgCount;
context.write(category, new IntWritable(avgWage));
category = key;
avgCount = 0;
avgTotal = 0;
avgWage = 0;
}
avgTotal += value.get();
avgCount++;
count++;
}
在那之后,我尝试了我现在拥有的代码,在我看来,这似乎更糟,但是我只是想尽全力而已,也不知道我在这方面做错了什么:
Text previous;
Text current;
int count = 0;
int totalAvg = 0;
int avgCount = 0;
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{
for(IntWritable value:values){
previous = current;
current = key;
if(count != 0 && previous == current){
totalAvg+= value.get();
avgCount++;
break;
}
else if(count != - && previous != current){
int avgWage = totalAvg/avgCount;
avgCount=0;
totalCount=0;
count++;
context.write(key,new IntWritable(avgWage));
}
}
}
如果我有任何遗漏,请告诉我,我一定会对其进行编辑。对于能帮助我解决此问题的任何人,在此先感谢您!