hadoop - 如何使用关系来过滤组?

标签 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);

最佳答案

如果我没有正确理解你的问题,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/

相关文章:

hadoop - 实现自定义 Hadoop 键类型和值类型

java - pig : UDF not returning expected resultset

hadoop - Apache pig : Convert bag of tupple to single tupple

hadoop - 根据单词过滤字符串

hadoop - Hive 容器运行超出物理限制

apache-spark - 在 Spark 中比较执行器之间的数据

hadoop - 如何在 Pig 的 Jython UDF 中增加 Hadoop 计数器

hadoop - 使用 hadoop mapreduce 作业从日志文件分析时间范围内的总错误条目发生率

java - 在 Java 应用程序中使用 Mahout

hadoop - 使用分割方式不带整数值的Hadoop-Sqoop导入