2017-06-14 42 views

回答

1

是的,你可以有多個值爲同一個鍵。 MapReduce中的map函數不像Java中的Map結構。但是,您可以將其視爲Multimap或散列表,如果此類比較容易: 您可以將多個值放入同一個存儲桶。

請參閱以下WordCount程序中的示例*(請參閱第二個映射器,發出兩次密鑰C)。這些鍵值對將在同一個桶中結束了(reduce任務):

enter image description here

不過,我存在這樣一個問題:你平時應儘量避免減少邊加入這種情況下,當地圖端連接適用時,就像你的情況一樣,出於效率的原因。例如,如果您可以在映射器中發出(key, [value1,value2,value3,...]),這通常會更快,因爲需要傳輸和連接的數據更少。既然你已經知道這三個值最終會在同一個reducer中,你可以像reducer一樣處理它們,或者做一些預處理來幫助reducer減少計算量(或者你也可以使用組合器這個目的)。在上圖中,從映射器中首先發出(C,2)會更快。

*縮減階段未在圖中正確顯示,但與問題無關。

0

是的,你可以做到這一點。每次您撥打context.write()時,您都會發送新的密鑰/值對,因此每個呼叫都與最後一個呼叫無關,因此與Map沒有真正的可比性。

0

是的,允許在mapper函數中編寫multiple key-valueMapReduce算法。以這種方式寫作實際上是正常的。您可以在apache word count中看到context.write(word, one);寫在while循環內,這意味着它正在寫入multiple times

回答第二個問題的方法是NO,除非您覆蓋reducer函數中的鍵。

相關問題