0

我有这个加入。

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 是否可以用于有效地连接数据。请注意,这是一个 RIGHT 外连接。

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

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

4

1 回答 1

1

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

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

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

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

B 的连接将是相似的。

于 2012-10-18T20:38:29.303 回答