如何在Apache Pig中使用PigStorage存储gzip压缩文件?

PP.*_*PP. 10 apache-pig

Apache Pig v0.7可以读取gzip文件而不需要额外的努力,例如:

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

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

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

但输出文件未压缩:

/tmp/usercount/part-r-00000
Run Code Online (Sandbox Code Playgroud)

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

小智 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;


med*_*oll 10

对于Pig r0.8.0,答案很简单,就是给你的输出路径扩展为".gz"(如果你更喜欢bzip,则为".bz").

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

STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');
Run Code Online (Sandbox Code Playgroud)

根据您的示例,您的输出文件将被找到

/tmp/usercount.gz/part-r-00000.gz
Run Code Online (Sandbox Code Playgroud)

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

  • 仅供参考:EMR目前默认运行Pig版本0.9.2,所以现在应该可以使用了. (2认同)