1

我写了我的 UDF 来将文件加载到 Pig 中。它适用于加载文本文件,但是,现在我还需要能够读取.gz文件。我知道我可以解压缩文件然后处理,但我只想读取.gz文件而不解压缩它。

我有我的 UDF 扩展自LoadFunc,然后在我的 costom 输入文件MyInputFile extends TextInputFormat中。我也实现了MyRecordReader。只是想知道扩展TextInputFormat是否是问题所在?我试过FileInputFormat了,仍然无法读取文件。.gz以前有人写过UDF从文件中读取数据吗?

4

1 回答 1

0

TextInputFormat处理 gzip 文件。看看它的 RecordReader 的 ( LineRecordReader) initialize() 方法,其中初始化了正确的CompressionCodec。另请注意,gzip 文件不可拆分(即使它们位于 S3 上),因此您可能需要使用可拆分格式(例如:LZO)或未压缩数据来利用所需的并行处理级别。

如果您的 gzip 压缩数据存储在本地,您可以按照此处所述的一步将其解压缩并复制到 hdfs 。或者如果它已经在 hdfs 上
hadoop fs -cat /data/data.gz | gzip -d | hadoop fs -put - /data/data.txt会更方便。

于 2012-12-23T21:27:21.037 回答