Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对从减速器输出的键值对进行排序_Java_Hadoop_Mapreduce - Fatal编程技术网

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代码添加到问题中吗?将答案添加为注释