我在加载输入数据时使用-tagsource选项 识别输入源。看来,后来我只投影了 从输入元组中选择的字段,有一些假设和 虽然我试图忽略它们,但某些字段会一直被投射出来。
看看我的剧本。
rawdata = load'data / 201212 *'使用PigStorage('',' - tagsource')作为 (filename:chararray,ts:int,ip:chararray,domain:chararray, 回答:chararray);
A = foreach rawdata生成ts,ip,domain,answer, CONCAT(CONCAT(文件名,'_'),UPPER(SUBSTRING(域,0,1)))as as domain_index,filename as filename;
B = foreach A生成ip为ip,SUBSTRING(domain,0,1)为 domain_first_char,filename;
转储A;
转储B;
说明B;
创建B时,我试图仅包括来自A的选定字段。 但是,如果我转储B,'ts'字段(A中的第一个字段)会一直显示 在B.但在ILLUSTRATE B中,一切看起来都不错。
转储A:
(100,123.98.11.123,google.com,{(谷歌)},20121201_G,20121201)
(95,500.98.11.123,yahoo.com,{(雅虎)},20121201_Y,20121201)
(107,123.98.11.123,google.com,{(谷歌)},20121201_G,20121201)
(156,123.98.11.123,cnn.com,{(CNN)},20121201_C,20121201)
B的转储:
(100,G,20121201)
(95,Y,20121201)
(107克,20121201)
(156,C,20121201)
说明B:
B | ip:chararray | domain_first_char:chararray | filename:chararray
| 123.98.11.123 | g | 20121202
如转储B所示,而不是将ip值打印为第一个字段(如 在图B)中,它打印了ts字段。
答案 0 :(得分:0)
在互联网上搜索,我发现这是PigStorage中的一个错误并找到了解决方法。
使用标记-t ColumnMapKeyPrune
开始生猪有助于解决此问题,即使用命令pig -x local -t ColumnMapKeyPrune sample.pig
启动猪。
感谢pig用户组的Reremiah Rounds。