2014-03-30 61 views
3

我一直在试图加载数据(CSV),如:猪加载使用PigStorage地图( '')

TXT = IPHONE,GA,US,CN,[桶#A,类型#用户,越狱#否],app_talkingtom,使用Apache猪负荷声明ios7

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; 

我得到#型用户,而不是

app_talkingtom;

我知道它的分隔符(',')问题。由于文件很大,我不能更改分隔符。 如何让Pig正确地载入地图?

+0

你摸不着头脑? – natdico

回答

0

在你的负载试试这个:

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

确保所有值都在地图chararrays。

0

PigStorage正在计算您的地图内的逗号([bucket#A,type#user,jailbreak#No])作为分隔符。

这就是为什么您的字段值与您的字段名称不符的原因。

PigStorage是一个非常简单的加载程序,它不处理特殊情况,如嵌入分隔符或转义控制字符;无论上下文如何,它都会在分隔符的每个实例上进行分割。因此,在加载CSV文件时,建议使用CSVExcelStorage而不是带逗号分隔符的PigStorage。

(来源:http://help.mortardata.com/technologies/pig/pigstorage

+0

使用上述脚本(IPHONE,GA,US,CN,type#user,越狱编号), CSVExcelStorage()无法识别[作为地图。我是否错过这里的一些东西 –

+0

@Ravinder你是对的,那是行不通的 – C8H10N4O2