2009-12-07 54 views
1

在編寫MapReduce作業(特別是Hadoop,如果相關時)時,必須定義一個map()和一個reduce()函數,這兩個函數都會產生一系列鍵/值對。鍵和值的數據類型可以由應用程序自由定義。map()和reduce()返回相同類型的鍵/值對嗎?

在字數統計的規範示例中,兩個函數都產生(string, int)類型的對,其中鍵爲單詞,值爲出現次數。這裏 - 以及我見過的所有其他示例 - 兩個函數之間輸出的鍵和值類型是一致的。

在MapReduce的任何應用程序中,必須/應該由map()reduce()產生的鍵/值對的類型是否相同?如果是,爲什麼?

回答

6

不,顯然,map的輸出對的類型和reduce的輸入對的類型必須相同,因爲其中一個被傳遞給另一個。

但是,您可能有一個減少任務輸出不同於進入的地圖對的類型 - 例如,如果地圖任務計算文檔中的單詞,但減少任務計算的平均值字頻。在這種情況下,地圖會發出整數,但減少會發出浮點數。

1

Map和Reduce輸出可能不同。但是你需要告訴應用程序他們是。方法如下:

setOutputKeyClass()和setOutuptValueClass()方法控制map和reduce函數的輸出類型,它們通常是相同的。

如果它們不同,可以分別通過setMapOutputKeyClass()和SetMapOutputValue設置地圖輸出鍵/值類型。

相關問題