带有空值的猪连接
Posted
技术标签:
【中文标题】带有空值的猪连接【英文标题】:Pig Join with null values 【发布时间】:2012-09-28 05:23:51 【问题描述】:在实现How to optimize a group by statement in PIG latin? 提供的解决方案时,我发现所有具有一个空列的行都被删除,这是 Pig 中的预期行为。我想知道下面的代码是否可以工作?
A = B join by ( Bcol1 is null?'UNK',Bcol2 is null?'UNK',Bcol2 is null?999),
C join by ( Ccol1 is null?'UNK',Ccol2 is null?'UNK',Ccol2 is null?999)
我遇到了一些解析错误。
【问题讨论】:
【参考方案1】:PIG 是一种数据流脚本语言,添加额外的 FOREACH GENERATE 来修复 null 不会导致额外的 map reduce 作业。
B = foreach B generate ....., (Bcol1 is null) ? 'UNK' : Bcol1 as Bcol1, (Bcol2 is null) ? 'UNK' : Bcol2 as Bcol2, (Bcol3 is null) ? 999 : Bcol3;
C = foreach C generate ....., (Ccol1 is null) ? 'UNK' : Ccol1 as Ccol1, (Ccol2 is null) ? 'UNK' : Ccol2 as Ccol2, (Ccol3 is null) ? 999 : Ccol3;
A = join B by (Bcol1, Bcol2, Bcol3), C by (Ccol1, Ccol2, Ccol3);
【讨论】:
感谢 Alexejpab 的回复,我确实以同样的方式在我这边实现了,但是唯一的缺点是它本质上会将值从 null 更改为某个确定性值,这可能会呈现为值..但我认为由于连接中没有 NVL 功能.. 这是要走的路.. 你总是可以做"(Bcol1 is null) ? 'UNK' : Bcol1 as JOIN_Bcol1",所以你用改变的空值复制列并在加入后丢弃它们以上是关于带有空值的猪连接的主要内容,如果未能解决你的问题,请参考以下文章
带有空值的 Seq[(Int,Int)] 隐式转换为 DataFrame