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
有两种方法:
如上所述,在存储中您可以将输出目录称为
usercount.gz
STORE UserCount INTO '/tmp/usercount.gz' USING PigStorage(',');
在脚本中设置压缩方法.
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
| 归档时间: |
|
| 查看次数: |
12873 次 |
| 最近记录: |