簡體   English   中英

在Map-Reduce中改組

[英]Shuffling in Map-Reduce

我正在用Java(沒有Hadoop)編寫一個map-reduce程序,只是為了鍛煉。 經典字數統計。 每個地圖(我有多個並行運行的地圖)都會生成這樣的鍵值數據:謝謝,1個Java,4個上下文,1個,1個,2個,…,…

現在,我必須重新整理地圖結果並將其發送給reduce任務,但我不確定該怎么做。 我的第一個想法是按照字母順序拆分地圖的輸出,例如,將從a到d的單詞發送到第一個reducer。 從e到h的單詞發送到第二個reduce,依此類推。

我不確定這是個好主意。 單詞“ distribution”是不規則的,因此某些減速器可能比其他減速器承受更多的負載。 一種解決方案可能是某種哈希,在這種情況下可以使用HashMap的哈希嗎?

有更好的方法嗎?

您可以在鍵值上使用哈希函數。 像這樣: hc = k.hashCode();

hashCode返回一個Integer,其值從負數到正數(從Integer.MIN_VALUE到Integer.MAX_VALUE),因此,如果使用它計算索引值以調用正確的reduce函數,請使用hc = k.hashCode() & 0xffffffff 按位與功能(&)屏蔽第一位,即位符號。

哈希沖突沒有問題(哈希為不同的鍵返回相同的值),重要的是對相同的鍵具有相同的哈希。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM