使用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
这是IOW完美的并排连接。我无法弄清楚如何在Hadoop中执行此操作,我相信我需要对这两个文件进行初始传递以附加行号?
使用Pig的答案,和/或地图/减少技巧的各种组合都很好。
答案 0 :(得分:1)
这篇文章为您提供了一个提示:SO POST about special input format
输入格式可以生成行号作为键,而不是给出字节偏移量。这样你就可以简单地使用单位映射器(只发出键值)并在reducer中进行连接。这可能看起来很难,但只是在输入格式中覆盖了几个函数而且你已经完成了。
答案 1 :(得分:1)
这应该适用于Pig:
A = load 'A.txt';
B = load 'B.txt';
rankedA = RANK A;
joined = JOIN rankedA BY $0, B BY $0;
如果您愿意,可以使用FOREACH
语句对列进行进一步重新排序。
答案 2 :(得分:0)
我认为由于这两个文件具有相同数量的记录,因此您只需使用一个传递(一个地图减少作业)就可以执行以下操作: -
希望这可能有助于你的事业。