Apache Pig:用字符串替换 null

Posted

技术标签:

【中文标题】Apache Pig:用字符串替换 null【英文标题】:Apache Pig: Replace null with string 【发布时间】:2012-06-07 10:30:14 【问题描述】:

我的数据中有很多空条目。由于稍后的处理,如果我可以将 null 的默认值设置为字符串“其他”,这将非常有帮助。我找不到这样做的方法(版本 0.8.1-cdh3u4)

另外,我的 GENERATE 语句中有一些变量可能返回 null,我需要类似于 SQL DECODE 函数的东西来获取“其他”字符串而不是 null。

例子:

tmp = FOREACH dump GENERATE site, REGEX_EXTRACT(name, '^(?:([^.]+)\\.?)1', 1) AS project, ((ami MATCHES '.*datatype.*') ? REGEX_EXTRACT(name, '^(?:([^.]+)\\.?)5', 1) : 'other') AS datatype, ami, duid, nbfiles, length, rnbfiles, rlength, name; 

这里:'site' 和 'datatype' 可以返回一个空字符串(这是有效的)并被解释为 null,但应该改为“other”。

非常感谢。

【问题讨论】:

我也一直想要这个。我认为不编写 UDF 在 pig 0.9.2 + piggybank 中是不可能的。 【参考方案1】:

所以我唯一能找到的是 ?: 三元运算符。这使得整个 pig 脚本有点冗长,但是很好,它可以工作:-)

(((ami MATCHES '.datatype.') ? REGEX_EXTRACT(name, '^(?:([^.]+)\.?)5', 1) : 'other') IS NULL ? 'other' : ((ami MATCHES '.datatype.') ? REGEX_EXTRACT(name, '^(?:([^.]+)\.?)5', 1) : 'other')) AS datatype

【讨论】:

嗨,这也适用于整数字段吗?您不能使用整数字段制作“IS NULL”命令吗?

以上是关于Apache Pig:用字符串替换 null的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Apache Pig 中过滤 NULL 值

我想用 PIG 中的 AVG 替换 NULL 值

如何计算 Apache Pig 中字符串的长度?

Apache PIG - 加入后投影结果为 NULL

当值为 NULL 时,Apache Pig 不尊重 ELSE 语句

使用 Apache Hadoop Pig 内连接两个数据集