将字符串连接到 pig 中的字段

Posted

技术标签:

【中文标题】将字符串连接到 pig 中的字段【英文标题】:concatenate a string to a field in 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)); 

我得到的结果是空的

有什么想法吗?

【问题讨论】:

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

示例:

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 中使用显式分隔符作为逗号。

以上是关于将字符串连接到 pig 中的字段的主要内容,如果未能解决你的问题,请参考以下文章

将字符串连接到 SELECT * MySql

如何将字符串连接到刀片中的 $ 变量?

播放 wav 文件,将字符串连接到调用文件

C#中如何设置字符串连接到MySQL数据库?

Spark - 将每个分区的字符串连接到单个字符串

如何将javascript函数中的参数字符串连接到附加html中的字符串上?