Java 对从减速器输出的键值对进行排序
我的Java 对从减速器输出的键值对进行排序,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我的作业包含一个映射器和一个减速机。reducer发出键值对,其中键是学生的姓名,值是gpa。reducer计算gpa。如何使减速机输出按值(gpa)排序? 减速器代码: public class ReducerClass extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values,
作业
包含一个映射器
和一个减速机
。reducer
发出键
值
对,其中键
是学生的姓名,值
是gpa。reducer
计算gpa。如何使减速机
输出按值
(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));
}
}
公共类Reducer类扩展Reducer{
public void reduce(文本键、Iterable值、,
上下文(上下文)
抛出IOException、InterruptedException{
int i=0;
int-total=0;
for(可写入值:值){
i++;
total=total+value.get();
}
write(key,newintwriteable(total));
}
}
一种方法是使用辅助排序。。其想法是在reducer键(一个复合键)中添加值,并允许hadoop在map的输出中进行排序。这需要对现有设计进行更多更改
另一种方法(可能更简单)是,当前作业完成后,可以将第一个作业的输出传递给第二个作业,并交换键和值。在这种情况下,第二个作业只能有一个映射,输出将显示为基于gpa排序。任何具有相同gpa的留级学生都可以作为特定gpa的列表 您还可以尝试在reducer的cleanup方法中对输出进行排序。reducer是发出键值对列表还是只发出一对?如果只有一对,那么排序是什么意思?@A.sharif:是的,它输出一系列键值对。从reducer返回的数据类型是什么?Hashmap?只需键值对:键(文本)和值(IntWritable)您可以将reducer代码添加到问题中吗?将答案添加为注释