Art*_*rov 9 cross-join apache-pig
如果有这样的数据:
A = LOAD 'data' AS (a1:int,a2:int,a3:int);
DUMP A;
(1,2,3)
(4,2,1)
Run Code Online (Sandbox Code Playgroud)
然后在A,A上完成交叉连接:
B = CROSS A, A;
DUMP B;
(1,2,3)
(4,2,1)
Run Code Online (Sandbox Code Playgroud)
为什么第二个A从查询中优化出来?
信息:猪版0.11
==更新==
如果我按A排序:
C = ORDER A BY a1;
D = CROSS A, C;
Run Code Online (Sandbox Code Playgroud)
它将提供正确的交叉连接.
reo*_*toa 14
davek是正确的 - 你不能CROSS(或JOIN)与自己建立关系.如果要执行此操作,则必须创建数据副本.在这种情况下,您可以使用另一个LOAD语句.如果您想通过管道中的关系进行此操作,则需要使用它来复制它FOREACH.
我经常使用几个宏,IMPORT默认情况下我的所有Pig脚本都需要它们.一个用于此目的:
DEFINE DUPLICATE(in) RETURNS out
{
$out = FOREACH $in GENERATE *;
};
Run Code Online (Sandbox Code Playgroud)
无论您在管道中需要重复,这都适用于您:
A1 = LOAD 'data' AS (a1:int,a2:int,a3:int);
A2 = DUPLICATE(A1);
B = CROSS A1, A2;
Run Code Online (Sandbox Code Playgroud)
请注意,即使A1和A2是相同的,你不能假设记录以相同的顺序.但如果你正在做一个CROSS或者JOIN,这可能并不重要.
dav*_*vek 10
我认为你必须加载两次数据才能达到你想要的效果.
即
A1 = LOAD 'data' AS (a1:int,a2:int,a3:int);
A2 = LOAD 'data' AS (a1:int,a2:int,a3:int);
B = CROSS A1, A2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |