假设我有关系 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);
最佳答案
如果我没有正确理解你的问题,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 ;
验证其名称。
关于hadoop - 如何使用关系来过滤组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522799/