使用'-tagFile'选项的项目文件名字段,使用PigStorage'-tagFile'加载,Pig 0.14
Posted
技术标签:
【中文标题】使用\'-tagFile\'选项的项目文件名字段,使用PigStorage\'-tagFile\'加载,Pig 0.14【英文标题】:Project file name field using '-tagFile' option, LOAD USING PigStorage '-tagFile', Pig 0.14使用'-tagFile'选项的项目文件名字段,使用PigStorage'-tagFile'加载,Pig 0.14 【发布时间】:2016-04-12 19:21:57 【问题描述】:Amazon EMR-4.5、Hadoop 2.7.2、Pig 0.14
我想在使用 -tagFile 选项加载后将文件名字段和选定字段投影到新关系。结果似乎没有意义。例子:
tagfile-test.txt(制表符分隔)
AAA 123 2016
BBB 456 2016
CCC 789 2016
负载转储
test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3);
DUMP test;
(tagfile-test.txt,AAA,123,2016)
(tagfile-test.txt,BBB,456,2016)
(tagfile-test.txt,CCC,789,2016)
正确 - 生成 f0、f1、f2
test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3);
project = FOREACH test GENERATE f0, f1, f2;
DUMP project;
(tagfile-test.txt,AAA,123)
(tagfile-test.txt,BBB,456)
(tagfile-test.txt,CCC,789)
不正确 - GENERATE f0, f1, f3(结果同上)
test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3);
project = FOREACH test GENERATE f0, f1, f3;
DUMP project;
(tagfile-test.txt,AAA,123)
(tagfile-test.txt,BBB,456)
(tagfile-test.txt,CCC,789)
不正确 - 生成 f0、f2、f3(确认)
test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3);
project = FOREACH test GENERATE f0, f2, f3;
DUMP project;
(tagfile-test.txt,AAA,2016)
(tagfile-test.txt,BBB,2016)
(tagfile-test.txt,CCC,2016)
Pig 似乎没有正确识别字段名称。我尝试使用字段位置($0、$1、$2、$3),结果相同。
【问题讨论】:
【参考方案1】:在 pigstorage 中使用 tagFile 选项时我遇到了同样的问题,并通过在 pig 脚本中添加以下行来解决问题:
设置 pig.optimizer.rules.disabled 'ColumnMapKeyPrune';
ColumnMapKeyPrune 在http://chimera.labs.oreilly.com/books/1234000001811/ch07.html#debugging_tips有很好的解释
【讨论】:
【参考方案2】:看起来字段是用''分隔的,但你在PigStorage中使用'\t'作为分隔符。还要指定字段的数据类型。
尝试更改此设置
test = LOAD 'tagfile-test.txt' USING PigStorage('\t','-tagFile') AS (f0, f1, f2, f3);
到
test = LOAD 'tagfile-test.txt' USING PigStorage(',','-tagFile') AS (f0:chararray, f1:chararray, f2:int, f3:int);
【讨论】:
抱歉,该文件实际上是制表符分隔的。我重新格式化了问题中的输入文件以明确这一点。我试过添加数据类型,同样的问题。对于数据类型,这些返回空白(在最后一个示例中为 f2 的情况),因为数据类型也不正确。以上是关于使用'-tagFile'选项的项目文件名字段,使用PigStorage'-tagFile'加载,Pig 0.14的主要内容,如果未能解决你的问题,请参考以下文章