Apache Pig:使用hadoop fs -text加载一个显示正常的文件

exi*_*xic 7 linux hadoop apache-pig cloudera

我有名为part-r-000 [0-9] [0-9]的文件,其中包含制表符分隔的字段.我可以使用hadoop fs -text part-r-00000它来查看它们,但无法使用猪来加载它们.

我尝试过的:

x = load 'part-r-00000';
dump x;
x = load 'part-r-00000' using TextLoader();
dump x;
Run Code Online (Sandbox Code Playgroud)

但这只会给我垃圾.如何使用猪查看文件?

可能相关的是我的hdfs目前仍在使用CDH-2.此外,如果我将文件下载到本地并运行file part-r-00000它说part-r-00000: data,我不知道如何在本地解压缩它.

Dol*_*cci 4

根据HDFS Documentationhadoop fs -text <file>可用于“zip 和 TextRecordInputStream”数据,因此您的数据可能采用这些格式之一。

如果文件被压缩,通常 Hadoop 在输出到 HDFS 时会添加扩展名,但如果缺少扩展名,您可以尝试通过本地 unzipping/ungzipping/unbzip2ing/etc 进行测试。看来 Pig 应该自动解压,但可能需要存在文件扩展名(例如,part-r-00000.zip)——更多信息

我对 TextRecordInputStream 不太确定..听起来这只是 Pig 的默认方法,但我可能是错的。当我快速谷歌一下时,我没有看到任何提到通过 Pig 加载这些数据。

更新: 既然您已经发现它是一个序列文件,那么您可以通过以下方式使用 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.);
Run Code Online (Sandbox Code Playgroud)