Apache pig 如何在ApachePig中使用PigStorage存储gzip文件?

Apache pig 如何在ApachePig中使用PigStorage存储gzip文件?,apache-pig,Apache Pig,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 cou

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的解决方案,我都想听一听。

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

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

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');
根据您的示例,您的输出文件将作为

/tmp/usercount.gz/part-r-00000.gz
有关更多信息,请参阅:

有两种方法:

  • 如上所述,在存储中,您可以将输出目录称为

    usercount.gz
    使用PigStorage(',')将UserCount存储到'/tmp/UserCount.gz'中

  • 在脚本中设置压缩方法

    将output.compression.enabled设置为true;
    设置output.compression.codec org.apache.hadoop.io.compress.gzip代码


  • 根据的清管器文件,有两种方法可以做到这一点

    使用“STORE”语句指定压缩格式 注意上面的陈述。Pig支持3种压缩格式,即GZip、BZip2和LZO。为了让LZO正常工作,您必须单独安装它。有关lzo的更多信息,请参阅

    通过作业属性指定压缩 通过在pig脚本中设置以下属性,即通过以下代码
    output.compression.enabled
    output.compression.codec

    set output.compression.enabled true;
    


    回答得很好。不幸的是,Amazon Elastic Map Reduce仅支持Pig v0.6.FYI:EMR当前默认运行Pig版本0.9.2,因此现在应该可以工作了。
    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;