linux - Apache pig : Load a file that shows fine using hadoop fs -text

标签 linux hadoop apache-pig cloudera

我有名为 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;

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

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

最佳答案

根据 HDFS Documentation , hadoop fs -text <file>可用于“zip 和 TextRecordInputStream”数据,因此您的数据可能采用其中一种格式。

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

我不太确定 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.);

关于linux - Apache pig : Load a file that shows fine using hadoop fs -text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286845/

相关文章:

linux - Bash 文件存在性检查丢失]

scala - Spark : long delay between jobs

csv - Pig 如何使用过滤器格式化半结构化 CSV

mysql - 我以 root 身份登录到 mysql,但无法向用户授予额外权限

python - 如何在 windows 和 linux (apache) 上使用相同的 python cgi 文件?

hadoop - 将数据从一个配置单元表插入到另一个

hadoop - 在配置单元的外部表中创建分区

hadoop - 将一些带有值数组的键加载到Pig中

apache-pig - PIG 过滤掉列数不正确的行

linux - 如何将特定列转换为标题大小写