我的job
包含mapper
和reducer
。 reducer
发出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));
}
}
答案 0 :(得分:0)
一种方法是使用二级排序。here。想法是在reducer键(复合键)中添加值,并允许hadoop在map的输出处进行排序。这需要对现有设计进行更多更改。
另一种方式(可能更容易),一旦你的当前工作完成,你可以将第一个工作的输出提供给第二个工作,并交换键和值。在这种情况下,第二个作业只能有一个地图,输出将显示为基于gpa的排序。任何具有相同gpa的重复学生都可以作为特定gpa的列表。
答案 1 :(得分:0)
您还可以尝试在reducer的清理方法中对输出进行排序。