在pig中从元组中过滤空列

6ljaweal  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(248)

我正在研究一个用例,我们必须消除元组中的空值

A =
    (7,Ron,ron@abc.com)
    (8,,rina@xyz.com )
    (9,Don,)
    (9,Don,dmes@xyz.com)
    (10,Maya,maya@cnn.com)

    B = FILTER A BY col2 != '';

输出:-

(7,Ron,ron@abc.com)
    (9,Don,dmes@xyz.com)
    (10,Maya,maya@cnn.com)

这里filter操作符过滤第二行。但我们必须过滤列。
预期输出应类似于:

(7,Ron,ron@abc.com)
(8,rina@xyz.com)
(9,Don,dmes@xyz.com)
(9,Don)
(10,Maya,maya@cnn.com)
2vuwiymt

2vuwiymt1#

我们可以将关系拆分为子关系,投影所需的列,然后将结果合并在一起:因此,如果第一列不可为null,则第二列和第三列可为null,但我们始终至少有一列,那么:

SPLIT A INTO col1null IF $1 is null, col2null  IF $2 is null, allnotnull IF ($1 is not null AND $2 is not null);
col1reject = FOREACH col1null GENERATE $0,$2; --remove column $1
col2reject = FOREACH col2null GENERATE $0,$1; --remove column $2
OUT = UNION allnotnull ,col1reject , col2reject ;

相关问题