我在加载输入数据时使用 -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 字段。