Hadoop MapReduce无法根据不同的键值计算多个平均值

时间:2018-11-29 21:17:50

标签: java hadoop mapreduce hdfs

我目前正在做一个项目,要求我接受许多不同的职位和工资,并计算每个职位的平均值。我已经用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));
       }
   }
}

如果我有任何遗漏,请告诉我,我一定会对其进行编辑。对于能帮助我解决此问题的任何人,在此先感谢您!

0 个答案:

没有答案