2015-06-26 2 views
0

Мой job содержит mapper и reducer. reducer испускает keyvalue пар, где key является именем студента, а value - это gpa. reducer вычисляет gpa. Как я могу сделать так, чтобы выходы reducer сортировались по value (gpa)? Код Разбавления:Сортировка ключей vlaue, выходящих из редуктора

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

@ A.sharif: Да, он выводит ряд пар ключевых значений. – raul

+0

Какой тип данных вы возвращаете из редуктора? Хашмап? –

ответ

0

Один из способов сделать это с использованием вторичного рода. here. Идея заключается в добавлении значения также в ключ редуктора (составной ключ) и позволяет hadoop выполнять сортировку на выходе карты. Это требует больше изменений в вашем существующем дизайне.

Другой способ (может быть, проще), когда ваша текущая работа завершена, вы можете дать выход первого задания второму заданию и обменять ключ и значение. В этом случае второе задание может иметь только карту, и результат будет отображаться как отсортированный на основе gpa. Любые повторные ученики с одним и тем же gpa могут прийти как список для определенного gpa.

0

Вы также можете попытаться отсортировать выходные данные в методе очистки редуктора.

+0

добавить как комментарий свой ответ –

Смежные вопросы