10

Apache Pig v0.7 可以读取 gzip 压缩文件,我无需付出额外的努力,例如:

MyData = LOAD '/tmp/data.csv.gz' USING PigStorage(',') AS (timestamp, user, url);

我可以处理该数据并将其输出到磁盘,好吧:

PerUser = GROUP MyData BY user;
UserCount = FOREACH PerUser GENERATE group AS user, COUNT(MyData) AS count;
STORE UserCount INTO '/tmp/usercount' USING PigStorage(',');

但输出文件未压缩:

/tmp/usercount/part-r-00000

有没有办法告诉STORE命令以 gzip 格式输出内容?请注意,理想情况下,我想要一个适用于 Pig 0.6 的答案,因为我希望使用 Amazon Elastic MapReduce;但如果有任何版本的 Pig 的解决方案,我想听听。

4

3 回答 3

14

有两种方法:

  1. 如上所述,在存储中,您可以将输出目录说为

    usercount.gz STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');

  2. 在脚本中设置压缩方法。

    set output.compression.enabled true; set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;

于 2012-11-27T10:48:25.220 回答
10

对于 Pig r0.8.0,答案很简单,只需为您的输出路径提供“.gz”的扩展名(如果您更喜欢 bzip,则为“.bz”)。

代码的最后一行应修改为:

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');

根据您的示例,您的输出文件将被发现为

/tmp/usercount.gz/part-r-00000.gz

有关详细信息,请参阅:https ://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#PigStorage

于 2011-02-24T05:34:18.763 回答
3

根据PigStorage的 Pig 文档,有两种方法可以做到这一点

使用“STORE”语句指定压缩格式

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');
STORE UserCount INTO '/tmp/usercount.bz2' USING PigStorage(',');
STORE UserCount INTO '/tmp/usercount.lzo' USING PigStorage(',');

请注意上述陈述。Pig 支持 3 种压缩格式,即 GZip、BZip2 和 LZO。为了让 LZO 工作,您必须单独安装它。有关 lzo 的更多信息,请参见此处

通过作业属性指定压缩

通过在您的猪脚本中设置以下属性,即output.compression.enabled通过output.compression.codec以下代码

set output.compression.enabled true;

set output.compression.codec com.hadoop.compression.lzo.LzopCodec;
set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;
set output.compression.codec org.apache.hadoop.io.compress.BZip2Codec;
于 2015-05-12T05:05:28.687 回答