1

假设我有关系 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);
4

1 回答 1

1

如果我正确理解了您的问题,那么输出J应该已经是您想要的。默认情况下JOIN是一个内连接,所以由于c它没有出现在A它不会被包含在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 ;

于 2013-08-30T00:29:54.427 回答