【问题标题】:Apache Pig -- how to load a file having fields enclosed within double quotes and separated by commaApache Pig - 如何加载包含用双引号括起来并用逗号分隔的字段的文件
【发布时间】:2017-05-08 20:12:54
【问题描述】:

假设文件“test1”有两个字段“a”和“b”。

样本值:

“嗨,你好吗”、“1”

“太热了”,“2”

注意第一条记录有 2 个逗号,并且仅使用双引号将其区分为 2 个列值。 第二条记录是有一个逗号。

如何编写一个猪脚本,它将加载具有双引号内值的文件。所以基本上想告诉Pig解释器字段值是用双引号括起来的。

类似的事情可以在 Hive 中实现,如下所示:

创建表 test1(
一个字符串 ,b 字符串 ); 行格式 serde 'com.bizo.hive.serde.csv.CSVSerde' 与 serdeproperties( "separatorChar" = "\,", "quoteChar" = "\"")
存储为文本文件;

【问题讨论】:

    标签: apache-pig


    【解决方案1】:
    A = LOAD '/path/to/file/' USING TextLoader() AS (line:chararray);
    
    B = FOREACH A GENERATE FLATTEN(STRSPLIT(line, '","'));
    
    C = FOREACH B GENERATE REPLACE($0,'"',''), REPLACE($1,'"','');
    
    STORE C INTO '/path/to/output/';
    

    很抱歉,我无法对此进行测试,但我之前遇到过这个问题。希望它有所帮助,并且很想看看是否还有其他方法可以做到这一点。

    【讨论】:

      【解决方案2】:

      您可以使用 Pig 中的 CSVExcelStorage 加载程序。数据中的双引号由这个加载器处理。您必须注册 Piggy-bank jar 才能使用此加载器。

      Register ${jar_location}/piggybank-0.15.0.jar;

      load_data = load '${data_location}' using org.apache.pig.piggybank.storage.CSVExcelStorage(',');

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多