使用Hadoop我想加入兩個具有相同記錄數但不攜帶行號的文件。例如A.TXT加入兩個沒有密鑰的等值數據集
a xx
b y
c z
和B.txt
1 r
2 s
3 d
加入後,我需要有
a xx 1 r
b y 2 s
3 d c z
這是督察完美的一面由端串聯。我無法弄清楚如何在Hadoop中做到這一點,我相信我需要在這兩個文件上初始傳遞以追加行號?
利用豬的答案,和/或地圖/減少技巧的各種組合都很好。
使用Hadoop我想加入兩個具有相同記錄數但不攜帶行號的文件。例如A.TXT加入兩個沒有密鑰的等值數據集
a xx
b y
c z
和B.txt
1 r
2 s
3 d
加入後,我需要有
a xx 1 r
b y 2 s
3 d c z
這是督察完美的一面由端串聯。我無法弄清楚如何在Hadoop中做到這一點,我相信我需要在這兩個文件上初始傳遞以追加行號?
利用豬的答案,和/或地圖/減少技巧的各種組合都很好。
這篇文章給你一個提示:SO POST about special input format
而不是給字節偏移輸入格式可以生產線號爲重點。這樣,您可以簡單地使用單位映射器(只發出關鍵值)並在reducer中進行連接。這看起來很難,但它只是在輸入格式中覆蓋了幾個函數,並且你完成了。
我覺得這兩個文件都記錄數量相等,所以你可以做以下只用一個通(一個地圖降低作業)的加入: -
希望這可以幫助你的事業。
這應該在豬的工作:
A = load 'A.txt';
B = load 'B.txt';
rankedA = RANK A;
joined = JOIN rankedA BY $0, B BY $0;
然後可以進一步與FOREACH
語句重新排序列,如果你想。