2015-11-04 100 views
0

我是Hadoop MapReduce的新手,最近遇到了如何在映射器中對輸出值進行合併的問題。我的映射器創建了一個Text,IntWritable輸出,其中數據集ID作爲關鍵字,元數據描述的長度作爲值。我的目標是將元數據長度的頻率分爲3組:1-200個字符,201-400個字符和401+個字符。輸出文件如下所示(第一列是關鍵,第二列是值 - 元數據的長度):如何在映射器中設置值?

1 256 
2 344 
3 234 
4 160 
5 432 
6 121 
7 551 
8 239 
9 283 
10 80 
... 

基於該合併結果上述值應顯示:

1-200  3 
201-400 5 
401-... 2 

不限如何處理它的想法?我應該將它作爲Mapper清理,Combiner還是Reducer?代碼示例或對其他在線來源的引用將不勝感激。謝謝。

回答

0

衆所周知,數據需要分箱到三個倉中。這些箱子可以靜態地Mapper聲明如下:

Text BIN1 = new Text("1-200");  // bin-1 
Text BIN2 = new Text("200-400"); // bin-2 
Text BIN3 = new Text("400-..."); // bin-3 

現在在地圖上創建一個HashMap<Text, Integer> map。當Mapper讀取數據時,它將更新map中相應的bin的計數。然後在cleanup()方法中寫這個map。映射器的輸出是TextIntWritable(這是來自map的每個bin的計數)。

如果在作業多個映射器,然後Mapper輸出可以在Reducer聚集,以及每個鍵(Text)的Iterable<IntWritable>值的簡單總和。