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

Posted

技术标签:

【中文标题】Pig:更改输出文件 NAME 的格式【英文标题】:Pig: changing the format of output file NAME 【发布时间】:2011-07-16 18:20:24 【问题描述】:

我正在运行一个弹性 mapreduce 管道,该管道使用来自多个 pig 脚本的输出。本质上pig脚本的输出存储在S3上的某个位置,由于数据量很大,所以创建的输出文件命名为part-xxxxx。

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

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

我不拥有实际执行此复制的管道步骤。我所能控制的(也许)是被复制的文件的名称)。所以我需要知道是否有办法为 pig 创建的零件文件的名称附加前缀。

谢谢

【问题讨论】:

【参考方案1】:

我不确定你是否可以更改 pig 中的前缀。

即使您说您无法控制它,我绝对认为最好将下游进程设为两个输入目录。为了下一步而不得不将两个目录复制到一个目录中,这听起来确实效率低下。

如果你真的必须这样做,你可以使用 hadoop 使用流式作业进行重命名,其中流式传输命令是“hadoop fs -cp”。如果您还没有看到这种方法,请告诉我,我可以将其写成博客文章,无论如何都有意义...

垫子

【讨论】:

【参考方案2】:

您可以使用以下方法对其进行一些更改:

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

【讨论】:

以上是关于Pig:更改输出文件 NAME 的格式的主要内容,如果未能解决你的问题,请参考以下文章

Apache pig 按功能分组未提供预期输出

将 Pig 输出转换为 JSON 格式

在 Pig 中将输出存储到 CSV 文件

Pig 脚本到日期转换问题导致不同的输出

递归格式化JSON数据

递归格式化JSON数据