如何使用关系过滤组?

eit6fx6z  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(509)

假设我有亲戚

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);
ljo96ir5

ljo96ir51#

如果我正确理解你的问题 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 ; .

相关问题