Map PIG UDF load.gz文件失败

Map PIG UDF load.gz文件失败,map,hadoop,gzip,user-defined-functions,apache-pig,Map,Hadoop,Gzip,User Defined Functions,Apache Pig,我编写了我的UDF来将文件加载到Pig中。它可以很好地加载文本文件,但是,现在我还需要能够读取.gz文件。我知道我可以解压文件然后处理,但我只想阅读.gz文件而不需要解压 我让我的自定义项从LoadFunc扩展,然后在我的costom输入文件MyInputFile扩展TextInputFormat。我还实现了MyRecordReader。只是想知道extendsTextInputFormat是否是问题所在?我尝试了FileInputFormat,但仍然无法读取该文件。以前有人写过UDF从.gz文

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


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

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

如果您的gzip数据存储在本地,您可以按说明一步解压并复制到hdfs。或者如果它已经在hdfs上

hadoop fs-cat/data/data.gz | gzip-d | hadoop fs-put-/data/data.txt会更方便。

TextInputFormat
可以处理gzip文件。请查看其RecordReader(
LineRecordReader
initialize()
方法,其中初始化了正确的压缩编解码器。还要注意,gzip文件不是可拆分的。感谢您指出这一点。如果它不是可拆分的,那么我想我会考虑先解开它。如果您能指出一些预解压缩文件然后加载到PIG的最佳实践,将不胜感激。比如说什么是最好的方法?谢谢。在不知道数据大小的情况下,最简单的方法是将未压缩的数据存储在hdfs上。您还可以使用可拆分格式(
LZO
)对其重新打包。如何提取gzip文件;本地磁盘->HDFS,请参阅:。如果已经在hdfs上:
hadoop fs-cat/data/data.gz | gzip-d | hadoop fs-put-/data/data.txt
从S3开始怎么样?与HDFS上的相同?只是想知道你能把你的评论作为答案吗?所以我可以接受你的答案:)顺便说一句,如果在HDFS中,想要从S3读取.gz文件并保存到HDFS中,那么运行
hadoop fs-cat s3n://yourbackes/yourfile.gzip-d>yourfile.txt