5

我有一个猪脚本,我在其中加载一个数据集,将其放入两个单独的数据集,然后执行一些计算,最后向其中添加另一个计算字段。现在我想加入这两个数据集。

A = LOAD '/user/hdfs/file1' AS (a:int, b:int);

A1 = FILTER A BY a > 100;
A2 = FILTER A BY a <= 100 AND b > 100;

-- Now I do some calculation on A1 and A2

所以本质上,在计算之后,这里是两者的模式:

{A1 : {a:int, b:int, type:chararray}}
{A2:  {a:int, b:int, type:chararray}}

现在,在我将其转储回 HDFS 之前,我想将这两个数据集合并回来。类似于UNION ALLSQL 中的东西。我怎样才能做到这一点?

4

2 回答 2

5

UNION 应该为您工作 - 但您的原始模式与显示的输出不匹配(b 被加载为 chararray 并稍后变为 int) - 我假设这是一个错字。

如果元组具有不同顺序的字段,则可以在执行 UNION 时使用 ONSCHEMA 关键字:

A_MERGED = UNION ONSCHEMA A1, A2;

编辑UNION的 PigLatin 文档链接

于 2013-01-11T12:15:04.520 回答
0

你可以使用 SPLIT

SPLIT A INTO A1 IF a > 100, A2 IF a <= 100 AND b > 100;
A = UNION A1, A2;
于 2016-02-24T11:22:23.187 回答