【问题标题】:concatenate a string to a field in pig将字符串连接到 pig 中的字段
【发布时间】:2015-01-30 00:47:05
【问题描述】:

我喜欢concat一个字符串到一个字段中的所有数据?

示例数据集 mydata 包含以下字段 ( id, name, email ) 我想在字段名称中的所有数据中添加字符串 test 的前缀。

我试过了

a = load 'mydata.csv' as (id, name, email);
b = foreach a generate id, concat('test', chararray(name)); 

我得到的结果是空的

有什么想法吗?

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:
    1. 在猪concat关键字中应该是Capital letters而不是小写字母。您需要将关键字concat 更改为CONCAT
    2. 您正在加载一个带有默认分隔符(制表符)的 CSV 文件。您确定您的 csv 文件是每个字段的制表符分隔符吗?否则你会得到一个奇怪的结果。如果您的 csv 文件是逗号分隔的分隔符,则在 PigStorage 中将显式分隔符指定为逗号。
    3. 在加载期间指定架构总是安全的,它将避免不必要的显式类型转换。

    示例:

    input.csv

    1,aaa,user1@gmail.com
    2,bbb,user2@gmail.com
    3,ccc,user3@gmail.com
    

    PigScript:

    a = load 'input.csv' using PigStorage(',') as (id:int, name:chararray, email:chararray);
    b = foreach a generate id, CONCAT('test', name);
    DUMP b;
    

    输出:

    (1,testaaa)
    (2,testbbb)
    (3,testccc)
    

    如果您的 csv 文件已经是制表符分隔的分隔符,则仅修复 CONCAT 问题。

    【讨论】:

    • 感谢 Shiva,您的解决方案有效,我犯的错误是我没有在 PigStorage 中使用显式分隔符作为逗号。
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2018-12-18
    • 2012-09-30
    • 2014-04-29
    • 2014-03-31
    • 1970-01-01
    • 2020-08-16
    • 2015-10-27
    相关资源
    最近更新 更多