2012-02-21 16 views
2

我有一個家庭作業分配,其中必須檢索某個文檔中不同單詞的總數。檢索Hadoop中縮減輸入組的數量

這與Hadoop提供的WordCount示例非常相似。但是現在我只想要文檔中不同單詞的總數。在控制檯輸出中,減少輸入組的數量對應於不同單詞的總數。

有沒有簡單的方法來檢索這個數字,甚至沒有減少數據。或者Map/Reduce不是解決這個問題的方法。鏈接也可以是一個解決方案,但是因爲答案已經在作業的控制檯輸出中提供了,所以我想知道是否沒有簡單的方法來檢索減少輸入組的數量而不做不需要的東西。

問候, Hadoop的新人

回答

1

在某些時候,你希望將它,因爲沒有辦法檢查清晰度不使數據一起。


那麼,你是正確的如何作弊作弊。而通過作弊,我的意思是我怎麼會在生產環境中這樣做,只是因爲它有多簡單,但無論如何感覺很髒。

在您的控制檯輸出中,查找「減少輸入組=」。這告訴你你的減員收到了多少組。一個組映射到一個密鑰,這意味着每個唯一密鑰只代表一次。

Reduce input groups=146030 

你可以讓自己的計數器來計數組,但數字是相同的。

...然後使用grep或類似的東西來推出它。

如果要獲取計數器值,還可以通過驅動程序中的API查詢作業狀態。


你的其他選擇,這顯然是慢,因爲它是一個額外的工作:第一階段,做的字數;第二階段,做線計數。

執行行數的一般方法是爲每個行發出與密鑰相同的虛擬字符串和1。基本上,您的地圖功能完全是context.write(dummyText, one)。請務必使用組合器並將縮減器的數量設置爲1.

+0

感謝您的輸入我現在使用「減少輸入組」計數器的值。這可以通過使用'Job'實例'job.getCounters()。findCounter(「org.apache.hadoop.mapred.Task $ Counter」,「REDUCE_INPUT_GROUPS」)''的以下方法找到。我使用Hadoop 1.0.0 – roelio 2012-02-22 11:51:16