1

我在加载输入数据时使用 -tagsource 选项以识别输入源。看来,后来虽然我只从输入元组中投影选定的字段,但有一些假设,并且某些字段一直被投影,尽管我试图忽略它们。

看看我的脚本。

rawdata = load 'data/201212*' using PigStorage(' ', '-tagsource') as (filename:chararray, ts: int, ip: chararray, domain: chararray, answer: chararray);

A = foreach rawdata generate ts, ip, domain, answer, CONCAT(CONCAT(filename, '_'), UPPER(SUBSTRING(domain, 0, 1))) as domain_index, filename as filename;

B = foreach A 生成 ip 为 ip, SUBSTRING(domain, 0, 1) 为 domain_first_char, 文件名;

转储 A;

转储 B;

说明 B;

在创建 B 时,我试图仅包含 A 中的选定字段。但是,如果我转储 B,则“ts”字段(A 中的第一个字段)会继续出现在 B 中。但是在 ILLUSTRATE B 中,一切看起来都像预期的那样好。

A的转储:

(100,123.98.11.123,google.com,{(google)},20121201_G,20121201)

(95,500.98.11.123,yahoo.com,{(yahoo)},20121201_Y,20121201)

(107,123.98.11.123,google.com,{(google)},20121201_G,20121201)

(156,123.98.11.123,cnn.com,{(cnn)},20121201_C,20121201)

B的转储:

(100,g,20121201)

(95,y,20121201)

(107,g,20121201)

(156,c,20121201)

说明 B:

乙| ip:chararray | domain_first_char:chararray | 文件名:字符数组

| 123.98.11.123 | 克 | 20121202

如 Dump B 所示,它不是将 ip 值打印为第一个字段(如图 B 所示),而是打印 ts 字段。

4

1 回答 1

0

在互联网上搜索,我发现这是 PigStorage 中的一个错误,并找到了解决方法。

使用 flag 启动 pig-t ColumnMapKeyPrune有助于解决此问题,即使用 command 启动 pig pig -x local -t ColumnMapKeyPrune sample.pig

感谢猪用户组的Rereemiah Rounds

于 2013-02-04T21:06:12.417 回答