pig使用pigstorage(',')加载Map

5vf7fwbs  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(401)

我一直在尝试加载一个数据(csv),例如:
txt=iphone,ga,us,cn,[bucket#a,type#user,jailbreak#no],应用程序#talkingtom,ios7
使用apache pig load语句:

raw = LOAD text USING PigStorage(',') as (phone:chararray,loc:chararray,country:chaarray,ctype:chararray,kyval:map[],appname:chararray,osver:chararray);

gen = foreach raw generate appname;

DUMP gen;

我明白了
键入#user而不是appŠtalkingtom;
我知道这是一个分隔符(',')的问题。我无法更改分隔符,因为文件很大。我如何使Pig装载Map正确?

ccrfmcuu

ccrfmcuu1#

在您的负载中尝试以下操作:

raw = LOAD text USING PigStorage(',') as (phone:chararray,loc:chararray,country:chaarray,ctype:chararray,kyval:map[chararray],appname:chararray,osver:chararray);

确保所有值都是Map中的字符。

v6ylcynt

v6ylcynt2#

pigstorage正在计算Map中的逗号( [bucket#A,type#user,jailbreak#No] )作为分隔符。
这就是为什么字段值与字段名不一致。
pigstorage是一个非常简单的加载器,它不处理特殊情况,例如嵌入式分隔符或转义控制字符;它将在分隔符的每个示例上拆分,而不考虑上下文。因此,在加载csv文件时,建议使用csvexcelstorage而不是带逗号分隔符的pigstorage。
(来源:http://help.mortardata.com/technologies/pig/pigstorage)

相关问题