Hadoop MapReduce проблема расчета нескольких средних значений из разных ключевых значений - PullRequest
0 голосов
/ 30 ноября 2018

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

Если я что-то пропустил, дайте мне знать, я обязательно отредактирую это. Заранее спасибо всем, кто может помочь мне с этим!

...