【问题标题】:Pig load a map using PigStorage(',')Pig 使用 PigStorage(',') 加载地图
【发布时间】:2014-05-09 12:12:16
【问题描述】:

我一直在尝试加载数据 (CSV),例如:

txt = IPHONE,GA,US,CN,[bucket#A,type#user,jailbreak#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;

我明白了

type#user 而不是 app_talkingtom

我知道这是一个分隔符 (',') 问题。由于文件很大,我无法更改分隔符。 如何让 Pig 正确加载该地图?

【问题讨论】:

  • 你发现了吗?

标签: csv map apache-pig


【解决方案1】:

在你的负载中试试这个:

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

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

【讨论】:

    【解决方案2】:

    PigStorage 将地图中的逗号 ([bucket#A,type#user,jailbreak#No]) 计为分隔符。

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

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

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

    【讨论】:

    • 使用上面的脚本我得到 (IPHONE,GA,US,CN,,type#user,jailbreak#No]),CSVExcelStorage() 无法识别 [ 作为地图。我在这里想念什么吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多