使用 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 和/或 map/reduce 技巧的各种组合的答案都很好。
这篇文章给你一个提示: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
然后,您可以根据需要使用语句进一步重新排序列。
我认为由于这两个文件具有相同数量的记录,因此您可以执行以下操作以仅使用一次传递(一个 map reduce 作业)加入:-
希望这对您的事业有所帮助。