В настоящее время я работаю над проектом, который требует, чтобы я взял несколько различных названий должностей и заработную плату и вычислил средние значения для каждой должности.У меня есть драйверы, Mapper и Reducer, настроенные в Java, но я не могу понять последнюю часть.
Mapper отправляет правильные данные в редуктор, но всякий раз, когда мне кажется, что получен 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));
}
}
}
Если я что-то пропустил, дайте мне знать, я обязательно отредактирую это. Заранее спасибо всем, кто может помочь мне с этим!