我有名为part-r-000 [0-9] [0-9]并包含制表符分隔字段的文件。 我可以使用hadoop fs -text part-r-00000来查看它们,但是无法使用pig加载它们。
我试过了:
x = load 'part-r-00000'; dump x; x = load 'part-r-00000' using TextLoader(); dump x;
可能相关的是我的hdfs目前仍在使用CDH-2。 此外,如果我将文件下载到本地并运行file part-r-00000它说part-r-00000: data ,我不知道如何解压缩到本地。
在Pig中指定ToDate(unix)中的时区
如何在GRUNT shell中取消命令
根据HDFS文档 ,可以在“zip和TextRecordInputStream”数据上使用hadoop fs -text <file> ,因此您的数据可能是这些格式之一。
如果文件被压缩,通常Hadoop会在输出到HDFS时添加扩展名,但是如果缺少这个扩展名,你可以尝试在本地解压/ ungzipping / unbzip2ing / etc。 看起来猪应该自动解压缩,但可能需要文件扩展名(如part-r-00000.zip) – 更多信息 。
我不太确定TextRecordInputStream ..它听起来像它只是猪的默认方法,但我可能是错的。 我没有看到任何提及通过猪加载这些数据时,我做了一个快速的谷歌。
更新:因为你已经发现它是一个序列文件,所以你可以使用PiggyBank来加载它:
-- using Cloudera directory structure: REGISTER /usr/lib/pig/contrib/piggybank/java/piggybank.jar --REGISTER /home/hadoop/lib/pig/piggybank.jar DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader(); -- Sample job: grab counts of tweets by day A = LOAD 'mydir/part-r-000{00..99}' # not sure if pig likes the {00..99} Syntax,but worth a shot USING SequenceFileLoader AS (key:long,val:long,etc.);
如果你想用Pig操作(读/写)序列文件,那么你也可以试试Twitter的Elephant-Bird 。
你可以在这里找到如何读/写它们的例子。
如果您在序列文件中使用自定义Writable,则可以通过扩展AbstractWritableConverter来实现自定义转换器。
请注意, Elephant-Bird需要在您的机器中安装Thrift 。 在构建它之前,请确保它使用了正确的Thrift版本,并在其pom.xml中提供了Thrift可执行文件的正确路径:
<plugin> <groupId>org.apache.thrift.tools</groupId> <artifactId>maven-thrift-plugin</artifactId> <version>0.1.10</version> <configuration> <thriftExecutable>/path_to_thrift/thrift</thriftExecutable> </configuration> </plugin>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。