我有一个猪脚本,我在其中加载数据集,将其潜入两个单独的数据集,然后执行一些计算,最后添加另一个计算字段。现在我想加入这两个数据集。
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之前,我想要将两个数据集合并回来。类似SQL中的UNION ALL
。我怎么能这样做?
答案 0 :(得分:4)
UNION应该适合你 - 但你原来的架构与显示的输出不匹配(b作为chararray加载,后来变为int) - 我假设这是一个错字。
如果元组具有不同顺序的字段,则可以在执行UNION时使用ONSCHEMA关键字:
A_MERGED = UNION ONSCHEMA A1, A2;
编辑指向UNION
的PigLatin文档的链接答案 1 :(得分:0)
您可以使用SPLIT
SPLIT A INTO A1 IF a > 100, A2 IF a <= 100 AND b > 100;
A = UNION A1, A2;