Pig:更改输出文件NAME的格式

时间:2011-07-16 18:20:24

标签: apache-pig amazon-emr

我正在运行一个弹性mapreduce管道,它使用多个pig脚本的输出。基本上猪脚本的输出存储在S3的某个位置,由于数据的大小很大,创建的输出文件被命名为part-xxxxx。

现在我的问题是我的管道中的一个步骤是从两个不同的位置复制内容并将它们放在一起,然后对整个集合进行处理。现在由于两个位置的文件命名相似(部分00000到部分00342),我的文件在复制过程中会被覆盖。

默认情况下,pig会在给定位置生成我的输出文件,其格式为filename。最初我曾经将pig输出文件下载到我的磁盘,编写一个python程序来重命名它们,然后将它们重新上传到S3。由于数据量很大,我现在不能这样做。

我没有实际执行此复制的管道步骤。我可以控制的(可能)是被复制的文件的名称。所以我需要知道是否有一种方法可以为猪创建的部分文件的名称附加前缀。

由于

2 个答案:

答案 0 :(得分:0)

我不确定你可以改变猪的前缀。

即使你已经说过你无法控制它,我绝对认为最好让下游进程成为两个输入目录。为了下一步,必须将两个目录复制到一个目录中听起来效率非常低。

如果你真的必须,你可以使用hadoop使用流媒体命令重命名自己,其中流命令是'hadoop fs -cp'。让我知道如果你没有看到这种方法,我可以把它写成博客文章,无论如何都有意义......

答案 1 :(得分:0)

您可以使用以下方式进行更改:

set mapreduce.output.basename 'MyDesiredPrefixName-';   /*  This changes the part-r-0000 to a customized name */