Pig使用PigStorage(',')加载地图

时间:2014-03-30 03:15:29

标签: csv map apache-pig

我一直在尝试加载数据(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正确加载地图?

2 个答案:

答案 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