我一直在尝试加载数据(CSV),例如:
txt = IPHONE,GA,US,CN,[存储桶#A,类型#用户,越狱#否],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 正确加载该地图?
在您的负载中尝试一下:
raw = LOAD text USING PigStorage(',') as (phone:chararray,loc:chararray,country:chaarray,ctype:chararray,kyval:map[chararray],appname:chararray,osver:chararray);
确保地图中的所有值都是字符数组。
PigStorage 正在将地图内的逗号 (
[bucket#A,type#user,jailbreak#No]
) 计算为分隔符。
这就是您的字段值与字段名称不同的原因。
PigStorage 是一个极其简单的加载器,不处理嵌入分隔符或转义控制字符等特殊情况;无论上下文如何,它都会在分隔符的每个实例上进行拆分。因此,在加载 CSV 文件时,建议使用 CSVExcelStorage 而不是带有逗号分隔符的 PigStorage。