将 PIG 中的 UNION 结果存储在单个文件中



我有一个PIG脚本,它产生四个结果我想将它们全部存储在一个文件中。我尝试使用 UNION ,但是当我使用 UNION 时,我得到四个文件 part-m-00000、part-m-00001、part-m-00002、part-m-00003。我无法获得单个文件?

这是 PIG 脚本

A = UNION Message_1,Message_2,Message_3,Message_4 into 'AA';

在 AA 文件夹中,我得到了上面提到的 4 个文件。我无法获得包含所有条目的单个文件吗?

Pig 在这里做正确的事情,并将数据集联合起来。所有这些都是一个文件并不意味着Hadoop中的一个数据集......Hadoop中的一个数据集通常是一个文件夹。由于它不需要在此处运行reduce,因此不会。

你需要愚弄猪来运行地图和减少。我通常这样做的方式是:

set default_parallel 1
...
A = UNION Message_1,Message_2,Message_3,Message_4;
B = GROUP A BY 1; -- group ALL of the records together
C = FOREACH B GENERATE FLATTEN(A);
...

GROUP BY将所有记录组合在一起,然后FLATTEN分解该列表。


这里要注意的一件事是,这与执行操作没有太大区别:

$ hadoop fs -cat msg1.txt msg2.txt msg3.txt msg4.txt | hadoop fs -put - union.txt

(这是连接所有文本,然后将其作为新文件写回HDFS)

这根本不是并行的,但也不是通过一个化简器汇集所有数据。

您是否尝试过设置 default_parallel 属性?

grunt> set default_parallel 1
grunt> A = UNION Message_1,Message_2,Message_3,Message_4;

最新更新