我有一个样本数据如下:
1950,0,1
1950,22,1
1950,-11,1
1949,111,1
1949,78,1
我使用了以下命令:
A = load 'path/to/the/sample';
B = foreach A generate $0,$1;
它应该只生成a的前2列。然后我用
describe B
为了检查它是如何工作的,它返回:b:{a:bytearray,b:bytearray},这是正确的。
但是,当我运行命令
dump B
返回原因:
(1950,0,1,)
(1950,22,1,)
(1950,-11,1,)
(1949,111,1,)
(1949,78,1,)
结果呢???太奇怪了。我试过好几次了。。。但结果还是一样
2条答案
按热度按时间xxe27gdn1#
在load语句中使用pigstorage子句。
现在你会得到你所期望的结果
(1950,0)
(1950,22)
(1950,-11)
(1949,111)
(1949,78)
drkbr07n2#
发生这种情况的原因是pig在默认情况下试图通过选项卡分隔数据。所以当你通过一条线
它认为它只找到了一个领域,
1950,0,1
. 因为您指出每行有两个字段,所以第二个字段设置为NULL
.所以当你
GENERATE
加载的两个字段,打印出元组如果你愿意的话
STORE
这个而不是DUMP
这样你会看得更清楚。pig将存储由制表符分隔的数据(同样是默认值),输出文件如下所示这不是很有启发性,所以看看如果你这样做会发生什么:
现在数据
output
会是您可以控制pig使用什么作为这两个字段的字段分隔符
LOAD
以及STORE
通过使用子句USING PigStorage(',')
. 对…的论点PigStorage
可以是你喜欢的任何角色。另一个常见的是USING PigStorage('\n')
,它将作为一个整体加载到每条线中。