使用'-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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 aws emr 上使用 -t ColumnMapKeyPrune 启动猪

jsp 标签文件

Tag file

PIG LOAD 文件名

JavaWeb学习——标签文件

ruby tagfiler.rb