对减速器输出的关键值对进行排序

时间:2015-06-26 18:58:46

标签: java hadoop mapreduce

我的job包含mapperreducerreducer发出key value对,其中key是学生的姓名,value是gpa。 reducer计算gpa。我怎样才能使reducer输出按value(gpa)排序? 减速机代码:

public class ReducerClass extends Reducer<Text, IntWritable, Text, IntWritable> {
      public void reduce(Text key, Iterable<IntWritable> values,
          Context context)
          throws IOException, InterruptedException {
          int i = 0;
          int total = 0;
          for (IntWritable value : values) {
              i++;
              total = total + value.get();
          }
          context.write(key, new IntWritable(total));
      }
}

2 个答案:

答案 0 :(得分:0)

一种方法是使用二级排序。here。想法是在reducer键(复合键)中添加值,并允许hadoop在map的输出处进行排序。这需要对现有设计进行更多更改。

另一种方式(可能更容易),一旦你的当前工作完成,你可以将第一个工作的输出提供给第二个工作,并交换键和值。在这种情况下,第二个作业只能有一个地图,输出将显示为基于gpa的排序。任何具有相同gpa的重复学生都可以作为特定gpa的列表。

答案 1 :(得分:0)

您还可以尝试在reducer的清理方法中对输出进行排序。