如何使用关系过滤GROUP?

时间:2013-08-29 23:55:36

标签: hadoop apache-pig

假设我有关系A

DUMP A;
(a)
(d)
(g)

现在我想使用A的值来过滤G组:

DUMP G;
(a, {(a,b), (a,c)})
(c, {(c,d), (c,x)})
(d, {(d,b), (d,e)})

......所以结果将是

(a, {(a,b), (a,c)})
(d, {(d,b), (d,e)})

然后我想提取组来生成:

 (a,b)
 (a,c)
 (d,b)
 (d,e)

我尝试了以下过滤部分,但它不起作用:

J = JOIN G BY group, A BY a1;
R = FOREACH (FILTER J BY J::group == A::a1)
    GENERATE FLATTEN(J.group);

1 个答案:

答案 0 :(得分:1)

如果我正确理解你的问题,J的输出应该已经是你想要的了。默认情况下,JOIN是内部联接,因此cA未显示J,因此J的输出中不会包含(a, {(a,b), (a,c)}, a) (d, {(d,b), (d,e)}, d) 。如果您转储FLATTEN,您应该看到:

R = FOREACH J GENERATE FLATTEN(G::FOO) ;

(或者与变量位置相似的东西。)

FOO打包,你需要做以下事情:

GROUP

在这种情况下,DESCRIBE G ;是您在{{1}}上执行的关系的名称。您可以使用{{1}}验证其名称。