對項目對進行一些評估是一項常見任務: 示例:重複數據刪除,協作過濾,類似項目等 這基本上是自加入或與同一數據源交叉產品。如何使用hadoop實現自加入/交叉產品?
4
A
回答
6
要做一個自我加入,你可以按照「reduce-side join」模式。映射器將加入/外鍵作爲鍵發出,將記錄作爲值發出。
所以,我們說我們想要做的「城市」以下數據(中間列)自聯接:
don,baltimore,12
jerry,boston,19
bob,baltimore,99
cameron,baltimore,13
james,seattle,1
peter,seattle,2
映射器會發出鍵 - >值對:
(baltimore -> don,12)
(boston -> jerry,19)
(baltimore -> bob,99)
(baltimore -> cameron,13)
(seattle -> james,1)
(seattle -> peter,2)
在減速,我們會得到這樣的:
(baltimore -> [(don,12), (bob,99), (cameron,13)])
(boston -> [(jerry,19)])
(seattle -> [(james,1), (peter,2)])
從這裏,你可以做內部聯接的邏輯,如果你選擇。要做到這一點,你只需要爲每個其他項目匹配每個項目。爲此,請將數據加載到數組列表中,然後對項目執行N×N循環以相互比較每個項目。
認識到減少方面的聯接是昂貴的。如果你不過濾任何東西,他們幾乎可以將所有數據發送到減速器。另外,請小心將數據加載到reducer中的內存中 - 通過將所有數據加載到數組列表中,您可以將熱堆放在熱連接鍵上。
以上與典型的縮小側連接有點不同。加入兩個數據集時的想法是相同的:外鍵是關鍵,記錄是值。唯一的區別是這些值可能來自兩個或更多數據集。您可以使用MultipleInputs
讓不同的映射器解析不同的輸入集,然後讓reducer從兩者收集數據。
在沒有任何限制的情況下交叉產品是一場噩夢。即,
select * from tablea, tableb;
有很多方法可以做到這一點。它們都不是特別有效。如果你想要這種行爲,留下評論,我會花更多的時間來解釋這種做法。
如果你可以找出某種類似的連接鍵,這是相似性的基本關鍵,你會好得多。
即插即用我的書:MapReduce Design Patterns。它應該在幾個月內發佈,但如果您真的感興趣,我可以通過電子郵件發送關於連接的章節。
0
通常使用reducer來執行連接所需的任何邏輯。訣竅是將數據集映射兩次,可能會將某個標記添加到指示它是哪個運行的值。然後,自連接與其他任何類型的連接沒有區別。
相關問題
- 1. 在hadoop中實現交叉連接
- 2. matlab - 交叉產品錯誤
- 3. 交叉表比較,產品
- 4. MapReduce中的交叉產品
- 5. 與Einsums的交叉產品
- 6. TinyOs中的交叉產品?
- 7. z3中的交叉產品
- 8. 我如何實現加入hadoop?
- 9. 加入默認值但不想交叉產品
- 10. 將來自羣組產品的所有簡單產品交叉銷售。可能?
- 11. Scala中的2套產品的交叉產品
- 12. MySQL交叉參考不同的產品
- 13. 兩個列表的交叉產品
- 14. 如何實現有序的交叉
- 15. 添加多個交叉銷售產品到購物車從產品頁
- 16. 我如何使用jQuery實現交叉引用攻擊?
- 17. 如何實現ProgresDialog [Android]產品
- 18. 關係代數交叉產品和自然聯接
- 19. 交叉算法的實現
- 20. Magento - 如何檢查交叉銷售產品是否存在。
- 21. 如何在RavenDB中做交叉連接/笛卡爾產品?
- 22. 交叉產物
- 23. 加入產品對比magento使用產品屬性(類別)
- 24. 交叉引用的藝品
- 25. 如何使用hadoop處理交叉數據輸入文件任務?
- 26. 使用加入笛卡爾產品
- 27. 如何加快交叉檢驗樣品的加樣?
- 28. 如何在JPA中實現自加入?
- 29. 如何使用二叉樹實現自定義邏輯?
- 30. 如何使用交叉表