2016-09-24 78 views
1

所以我必須從以前的作業的輸出文件格式(txt文件)查找最-K

" 145 
"Defects," 1 
"Information 1 
"Plain 2 
"Project 5 
"Right 1 
#51302] 1 
$5,000) 1 
& 3 
'AS-IS', 1 
( 1 
("the 1 

每條線的左側,是我讀單詞從文檔和每行右側的數字是我計算它的次數。我想使用Python & Hadoop Streaming來創建另一個地圖縮減作業,以查找top-k值。在這種情況下,我們說5。我無法想象映射器應該做什麼。

我應該分析每一行並將每個單詞和計數附加到列表中。那麼從這些列表中,我會採取top-k值並將其發送給reducer嗎?然後reducer讀取所有這些列表並只返回top-k值?如果有人可以通過僞代碼提供一些建議或糾正我,如果我在錯誤的道路上,將不勝感激。謝謝!

回答

0

你幾乎走在正確的軌道上。考慮你的詞作爲關鍵字,並將計數作爲你的映射器任務的價值。如果在你的輸入文件中,你可以得到同一個單詞和不同計數的多個條目,那麼你不能從它中取出最高的K.那麼你將不得不彙總數據,然後找出最重要的K。這應當在減速機中完成。由於縮減器應該接收同一個鍵的所有數據,它可以聚合完整的數據並取出最高的K.但是然後必須有另一個鏈映射減少以找出所有記錄中的最高K,其中你應該有1個縮減器找到最重要的元素。

但是,如果您的輸入文件有一次輸入密鑰的條目,則可以從所有映射器發出頂部K,然後將其發送到1個Reducer以從所有映射條目中找出頂部K.