【发布时间】:2012-12-20 20:17:18
【问题描述】:
我编写了我的 UDF 来将文件加载到 Pig 中。它适用于加载文本文件,但是,现在我还需要能够读取.gz 文件。我知道我可以解压缩文件然后处理,但我只想阅读.gz 文件而不解压缩它。
我的 UDF 从LoadFunc 扩展,然后在我的成本输入文件MyInputFile extends TextInputFormat 中。我还实现了MyRecordReader。只是想知道扩展TextInputFormat 是否有问题?我试过FileInputFormat,仍然无法读取文件。之前有人写过UDF从.gz文件中读取数据吗?
【问题讨论】:
-
TextInputFormat可以处理 gzip 文件。看看它的 RecordReader 的 (LineRecordReader)initialize()方法,其中初始化了正确的 CompressionCodec。另请注意,gzip 文件不可拆分。 -
感谢您指出这一点。如果它不可拆分,那么我想我会考虑先解压缩它。如果您能指出一些预解压缩文件然后加载到 PIG 的最佳实践,将不胜感激。比如最好的方法是什么?谢谢。
-
在不知道数据大小的情况下,最简单的方法是将数据未压缩存储在 hdfs 上。您也可以使用可拆分格式 (
LZO) 重新打包它。如何提取 gzip 文件;本地磁盘->HDFS,见:bigdatanoob.blogspot.hu/2011/07/…。如果已经在 hdfs 上:hadoop fs -cat /data/data.gz | gzip -d | hadoop fs -put - /data/data.txt -
从 S3 怎么样?和它已经在 HDFS 上一样吗?只是想知道你能把你的评论作为答案吗?所以我可以接受你的回答:)
标签: map hadoop gzip user-defined-functions apache-pig