在PIG中,当我们使用LOAD语句加载CSV文件而不提及架构&使用默认的PIGSTORAGE(\ t),会发生什么? Load可以正常工作,我们可以转储数据吗?否则它会抛出错误,因为文件有','并且pigstorage是'/ t'?请建议
答案 0 :(得分:2)
当您在未使用PigStorage('\ t')定义架构的情况下加载csv文件时,由于输入文件的每一行都没有选项卡,因此整行将被视为一个元组。您将无法访问该行中的单个单词。
示例: 输入文件:
john,smith,nyu,NY
jim,young,osu,OH
robert,cernera,mu,NJ
a = LOAD 'input' USING PigStorage('\t');
dump a;
OUTPUT:
(john,smith,nyu,NY)
(jim,young,osu,OH)
(robert,cernera,mu,NJ)
b = foreach a generate $0, $1, $2;
dump b;
(john,smith,nyu,NY,,)
(jim,young,osu,OH,,)
(robert,cernera,mu,NJ,,)
理想情况下,b应该是:
(john,smith,nyu)
(jim,young,osu)
(robert,cernera,mu)
如果分隔符是逗号。但由于分隔符是一个选项卡,输入记录中不存在选项卡,因此整行被视为一个字段。如果一个字段为空,那么Pig doe snot会抱怨它 - 当有一个空值时它只输出任何东西。因此,当您转储b
时,您只会看到逗号。
希望这很有用。