我一直在尝试加载数据(CSV),如:
txt = IPHONE,GA,US,CN,[bucket#A,type#user,越狱#No],app_talkingtom,ios7
使用Apache Pig加载语句:
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正确加载地图?
答案 0 :(得分:0)
在你的负载中试试这个:
raw = LOAD text USING PigStorage(',') as (phone:chararray,loc:chararray,country:chaarray,ctype:chararray,kyval:map[chararray],appname:chararray,osver:chararray);
确保地图中的所有值都是chararrays。
答案 1 :(得分:0)
PigStorage将地图中的逗号([bucket#A,type#user,jailbreak#No]
)计为分隔符。
这就是您的字段值不在字段名称中的原因。
PigStorage是一个非常简单的加载器,它不处理特殊情况,例如嵌入分隔符或转义控制字符;无论上下文如何,它都会在分隔符的每个实例上拆分。因此,在加载CSV文件时,建议使用CSVExcelStorage而不是PigStorage和逗号分隔符。
(资料来源:http://help.mortardata.com/technologies/pig/pigstorage)