在没有键的情况下连接两个相等的数据集

qnyhuwrf  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(307)

我想使用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中做到这一点,我相信我需要对这两个文件的初始传递来附加行号?
使用pig和/或各种map/reduce技巧组合的答案都很好。

wwtsj6pe

wwtsj6pe1#

这篇文章给了你一个提示:关于特殊输入格式的文章
输入格式可以产生行号作为键,而不是给出字节偏移量。这样,您就可以简单地使用一个单元Map器(只发送键值)并在reducer中进行连接。这看起来很难,但它只是在输入格式中覆盖了几个函数,您就完成了。

kq0g1dla

kq0g1dla2#

这应该适用于pig:

A = load 'A.txt';
B = load 'B.txt';

rankedA = RANK A;
joined = JOIN rankedA BY $0, B BY $0;

然后可以使用 FOREACH 如果你愿意的话。

4szc88ey

4szc88ey3#

我认为,由于这两个文件的记录数相等,因此您可以只使用一个过程(一个map reduce作业)来执行以下操作:-
您可以将这两个文件加载到两个不同的临时表中。
现在您可以在配置单元中创建一个自定义项来生成行号(比如从1开始),并从配置单元临时表中选择字段来创建最终表,该表将包含三列,即额外的列将包含行号。
现在可以使用行号连接最后两个表。
希望这能对你的事业有所帮助。

相关问题