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

问题描述 投票:0回答:2

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

csv dictionary apache-pig
2个回答
0
投票

在您的负载中尝试一下:

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

确保地图中的所有值都是字符数组。


0
投票

PigStorage 正在将地图内的逗号 (

[bucket#A,type#user,jailbreak#No]
) 计算为分隔符。

这就是您的字段值与字段名称不同的原因。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.