如何使用cogroup进行连接

时间:2012-10-02 13:13:29

标签: join apache-pig

我有这个加入。

A = Join smallTableBigEnoughForInMemory on (F1,F2) RIGHT OUTER, massive on (F1,F2);

B = Join anotherSmallTableBigforInMemory on (F1,F3 ) RIGHT OUTER, massive on (F1,F3);

由于两个连接都使用一个公共密钥,我想知道COGROUP是否可以用于有效地连接数据。请注意,这是一个正确的外部联接。

我确实考虑过在F1上进行组合,但是小表在单键上有多个组合(200-300),所以我没有使用单键加入。

我认为分区可能会有所帮助,但数据有偏差,我不确定如何在Pig

中使用它

1 个答案:

答案 0 :(得分:1)

您正在寻找Pig的片段复制连接的实现。有关不同连接实现的更多详细信息,请参阅O'Reilly一书Programming Pig。 (特别参见第8章,让猪飞。)

在片段复制连接中,不需要减少阶段,因为大输入的每个记录都通过映射器流式传输,与小输入(完全在内存中)的任何记录匹配,并输出。但是,您必须小心不要使用不适合内存的输入进行此类连接 - Pig将发出错误并且作业将失败。

在Pig的实现中,必须首先给出大输入,因此您实际上将进行左外连接。只需点击“使用'复制'”:

A = JOIN massive BY (F1,F2) LEFT OUTER, smallTableBigEnoughForInMemory BY (F1,F2) USING 'replicated';

B的联接类似。