問題是MapReduce連接通常是通過給某些字段上匹配的記錄使用相同的reduce鍵來實現的,以便它們被髮送到同一個reducer。因此,任何解決這個問題的方法都會有些破綻,但這是可能的...
下面是我會推薦的:對於每個輸入記錄,生成三個副本,每個副本都帶有一個新的「鍵」字段以來自它的字段爲前綴。因此,例如,說你有以下輸入:
(ip=1.2.3.4, session=ABC, cookie=123)
(ip=3.4.5.6, session=DEF, cookie=456)
,那麼你會產生
(ip=1.2.3.4, session=ABC, cookie=123, key=ip_1.2.3.4)
(ip=1.2.3.4, session=ABC, cookie=123, key=session_ABC)
(ip=1.2.3.4, session=ABC, cookie=123, key=cookie_123)
(ip=3.4.5.6, session=DEF, cookie=456, key=ip_3.4.5.6)
(ip=3.4.5.6, session=DEF, cookie=456, key=session_DEF)
(ip=3.4.5.6, session=DEF, cookie=456, key=cookie_456)
然後你可以簡單地在這個新的領域組。
我並不太熟悉燙傷/級聯(儘管我一直想要了解更多關於它的內容),但這肯定會符合Hadoop中通常如何進行連接。
這樣,我會得到3個不同的重疊羣(每個鍵repectivelly相等),所以我需要一種方法將它們合併到單個組 – yura
@yura如果左記錄可以與多個正確的記錄,然後加入通常是加入會讓他們沒有參與(如此重複的價值)。原因是合併會導致未定義的元組大小(表格寬度),您可能會得到1,2或3個正確的記錄。因此這個解決方案是正確的,(但缺乏細節和基本的實現;)。 – samthebest