2011-09-02 140 views
0

我試圖找到一種方法來「循環」我減速,例如:Hadoop的循環減速器

for(String document: tempFrequencies.keySet()) 
{ 
if(list.get(0).equals(document)) 
{ 
testMap.put(key.toString(), DF.format(tfIDF)); 
} 
} 
//This allows me to create a hashmap which i plan to write out to context as Filename = key then all of the terms weights = value (a list I can parse out in the next job) 

代碼目前將貫穿整個運行減少和給我我想要的list.get (0),但問題是一旦它完成了整個減少我需要它再次啓動list.get(1)等任何想法如何循環減少階段後,它已完成?

+0

我將重新制定。這個問題對於hadoop框架特別重要嗎?如果是這樣,你可以給更多的背景。 –

+2

在Hadoop的reduce狀態期間,它會爲映射器中的每個鍵值對循環。因此,如果我按照Paul的建議進行操作,那麼只需針對每個鍵,值對運行代碼兩次(或者多次設置循環)。我需要做的是運行整個reduce(循環遍歷每個鍵,值)輸出結果,然後在第一個鍵值對處再次循環啓動。直到我得到每個文檔的結果。 – chrstahl89

+0

好的。所以,如果我理解正確的東西,你需要找到一種方法,以更新的價值回到循環。正確? –

回答

0

巢for循環

for(int i = 0; i < number_of_time; i++){ 
//your code 

} 

其中i更換0。

0

您可以使用鍵標籤值技術。 在映射器中爲列表值和文檔(?)的(鍵值,值)發出(鍵值爲0,值)。在縮減器中,值將按鍵和標籤分組,並按照每個鍵的標籤進行分類。你應該編寫你自己的分組比較器(和自定義分區器)。 PS我正在使用相同的技術進行圖形處理。週末後我可以提供示例代碼。