我有这个加入。
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上的cogroup,但是小表在单个键上有多个组合(200-300),所以我没有使用使用单个键的join。
我认为分区可能有帮助,但数据有偏差,我不知道如何在pig中使用它
1条答案
按热度按时间j2cgzkjk1#
您正在寻找pig的片段复制连接实现。有关不同连接实现的更多详细信息,请参阅o'reilly book programming pig(具体见第8章,让Pig飞。)
在片段复制连接中,不需要reduce阶段,因为大输入的每条记录都通过Map器流式传输,与小输入(完全在内存中)的任何记录匹配,然后输出。但是,您必须小心,不要对不适合内存的输入执行这种连接—pig将发出错误,作业将失败。
在pig的实现中,必须首先给出大的输入,因此实际上您将执行一个左外连接。只要加上“使用‘复制品’”:
b的连接将类似。