2015-06-26 77 views
0

我的job包含mapperreducerreducer發出keyvalue對,其中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

@ A.sharif:是的,它會輸出一系列關鍵值對。 – raul

+0

從減速器中獲取的數據類型是什麼?一個哈希表? –

回答

0

一種做法是使用二次排序。 here。這個想法是在reducer key(一個複合鍵)中加入值,並允許hadoop在map的輸出處進行排序。這需要對現有設計進行更多更改。

另一種方式(可能會更容易),一旦您的當前工​​作完成,您可以將第一份工作的輸出提供給第二份工作,並交換密鑰和價值。在這種情況下,第二個作業只能有一個地圖,輸出將顯示爲基於gpa排序。任何重複的學生,以同樣的gpa,可以作爲特定gpa的列表。

0

您還可以嘗試對reducer的清理方法中的輸出進行排序。

+0

添加評論你的回答 –

相關問題