如何使用 Pig 将分组记录存储到多个文件中?

Posted

技术标签:

【中文标题】如何使用 Pig 将分组记录存储到多个文件中?【英文标题】:How to store grouped records into multiple files with Pig? 【发布时间】:2012-02-16 15:52:51 【问题描述】:

加载和分组记录后,如何将这些分组记录存储到多个文件中,每组一个 (=userid)?

records = LOAD 'input' AS (userid:int, ...);
grouped_records = GROUP records BY userid;

我正在使用 Apache Pig 版本 0.8.1-cdh3u3(重新导出)

【问题讨论】:

嗯,Piggybank 中的 MultiStorage 似乎是我正在寻找的 (?)svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/… 【参考方案1】:

确实,Piggybank 处有一个 MultiStorage 类,它完全符合我的要求 - 它按指定属性(在我的示例中位于索引“0”处)分割记录:

STORE records INTO 'output' USING org.apache.pig.piggybank.storage.MultiStorage('output', '0', 'none', ',');

【讨论】:

你知道如何做同样的事情,但我不想指定压缩格式,而是想以 RC 格式存储我的文件? 对不起 Emtiaz,我不知道。【参考方案2】:
 A = LOAD 'mydata' USING PigStorage() as (a, b, c);  
 STORE A INTO '/my/home/output' USING MultiStorage('/my/home/output','0', 'bz2', '\\t');

参数:

    parentPathStr - 父输出目录路径 splitFieldIndex - 关键字段索引 压缩 - 'bz2'、'bz'、'gz' 或 'none' fieldDel - 输出记录字段分隔符。

参考:GrepCode

【讨论】:

以上是关于如何使用 Pig 将分组记录存储到多个文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Pig 将多个文件输入到一个映射器中

如何使用 apache pig 将一个包转换为多个包?

如何读取 CSV 并生成 json/avro 文件,其中 pig 按第一列的值分组?

如何使用 apache pig 将标题行加入多个文件中的详细行

pig分组统计例子

如何使用 PIG 将 Avro 格式存储在 HDFS 中?