0
A
回答
1
您可以將所有輸入元組映射到同一個鍵,其值與每個輸入元組相同,如(one-key,(Ben,20)),並使用reduce函數僅返回具有最高等級的元組(因爲只有一個密鑰)。
爲了確保MR並行性能夠開始,使用具有與reducer相同功能的組合器(上圖)應該可以做到。這樣,縮減器將只從每個映射器獲得一個元組,並且將做更少的工作。
編輯:更好的是,您已經可以消除映射函數中除max以外的所有元素,以獲得最佳性能(請參閱Venkat的說法,即不保證使用組合器)。
實施例具有兩個映射器:
Paul 90
Ben 20
Cook 80
Joe 85
映射到:
Mapper 1
(the-one-key, (Paul, 90))
(the-one-key, (Ben, 20))
Mapper 2
(the-one-key, (Cook, 80))
(the-one-key, (Joe, 85))
組合以(仍然在映射器側):
Mapper 1
(the-one-key, (Paul, 90))
Mapper 2
(the-one-key, (Joe, 85))
簡化爲:
(the-one-key, (Paul, 90))
最後一句話:如果你有一個小的數據集,MapReduce可能「太多」了。如果只有幾百或幾千個值,則在本地內存中進行簡單掃描會更快。
1
這樣做的一個好方法是在Hadoop中進行二次排序。您的地圖輸出鍵應該是(名稱,標記)的組合。
然後,您可以實現一個自定義比較器,該比較器可以根據標記僅接受比較2給定的值並基於較高的標記進行排序來取得該關鍵字&。
通常我們實現一個分組比較器,但在這種情況下,我們希望所有的鍵都進入一個簡化器。所以我們會忽略分組比較器中的關鍵差異。
在減速機剛剛得到第一個值&退出。次要排序的
詳細說明:Secondary Sort
0
看看下面的代碼在要旨:
https://gist.github.com/meshekhar/6dd773abf2af6ff631054facab885bf3
在映射器,數據被映射到鍵值對:
key: "Paul 90"
key: "Ben 20"
key: "Cook 80"
key: "Joe 85"
在reducer中,使用while循環遍歷所有記錄,每個值被分割成名稱和標記,並且ma x標記存儲在臨時變量中。
最後,返回最大值和相應的名稱對。例如Paul 90.
我在單節點系統上測試了它,記錄超過100萬條,時間不到10秒。
相關問題
- 1. Nodejs:如何在JSON對象中找到特定的鍵值對
- 2. 如何找到鍵是特定值的對象的索引?
- 3. 如何獲得一個單一的鍵值對作爲減速器的輸出
- 4. 如何找到鍵值對特定的字符串MongoDB中
- 5. 如何找到特定鍵的鍵碼
- 6. 給定一個對象數組,找到一個特定的鍵對象
- 7. 找到一個特定數組的哈希鍵作爲值
- 8. 分類從減速器輸出的鍵值對
- 9. 如何使Hadoop減速器爲單個鍵輸出多個值
- 10. 快速一:在我的課堂上找到一個特定的分配對象
- 11. 如何在對象的向量中找到一個特定的值
- 12. 在PHP中,我如何找到與特定鍵相關的值
- 13. Clojure幽靈:如何找到具有特定值的地圖鍵?
- 14. Eclipse熱鍵快速找到一個包
- 15. 如何找到差值小於特定值的最大對數?
- 16. 如何找到一個方程中的特定變量,但用減法
- 17. 如何從Redux的減速
- 18. 爲了得到從減速器只有一個彙總值
- 19. 如何遍歷一個TreeMap直到一個特定的鍵?
- 20. 如何在一個指定的位置上找到一個物體並減速到停止位置?
- 21. 如何從多維數組中獲取特定鍵/值對的特定數組
- 22. 如何找到空值在多維數組特定鍵
- 23. 的Hadoop:減速機輸出到另一個減速
- 24. 如何找到一個特定的字符,如果發現它返回一個特定的值?
- 25. 如何查詢特定鍵值對的多個SQL表?
- 26. 如何從匹配對的MySQL表中找到共享鍵值?
- 27. Javascript檢查某個特定的鍵值並從JSON打印另一個鍵值
- 28. 在Javascript從JSON對象找到鍵值
- 29. 如何減少0(n)查找總結特定值的對的第一個實例
- 30. 查找除特定鍵以外的所有值:值對Mongo
Java MR?或者你可以使用Hive/Pig/Spark? –