从猪的元组中过滤出空列
Filter a null column out of tuple in pig
我正在处理一个用例,在该用例中我们必须消除元组中的空值
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)
此处过滤运算符过滤第二行。但是我们必须过滤列。
预期的输出应该是这样的:
(7,Ron,ron@abc.com)
(8,rina@xyz.com)
(9,Don,dmes@xyz.com)
(9,Don)
(10,Maya,maya@cnn.com)
我们可以将我们的关系拆分为子关系,投影所需的列,然后将结果合并在一起:
因此,如果第一列不可为空,则第二列和第三列可以为空,但我们始终至少有一个,那么:
SPLIT A INTO col1null IF is null, col2null IF is null, allnotnull IF ( is not null AND is not null);
col1reject = FOREACH col1null GENERATE [=10=],; --remove column
col2reject = FOREACH col2null GENERATE [=10=],; --remove column
OUT = UNION allnotnull ,col1reject , col2reject ;
我正在处理一个用例,在该用例中我们必须消除元组中的空值
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)
此处过滤运算符过滤第二行。但是我们必须过滤列。
预期的输出应该是这样的:
(7,Ron,ron@abc.com)
(8,rina@xyz.com)
(9,Don,dmes@xyz.com)
(9,Don)
(10,Maya,maya@cnn.com)
我们可以将我们的关系拆分为子关系,投影所需的列,然后将结果合并在一起: 因此,如果第一列不可为空,则第二列和第三列可以为空,但我们始终至少有一个,那么:
SPLIT A INTO col1null IF is null, col2null IF is null, allnotnull IF ( is not null AND is not null);
col1reject = FOREACH col1null GENERATE [=10=],; --remove column
col2reject = FOREACH col2null GENERATE [=10=],; --remove column
OUT = UNION allnotnull ,col1reject , col2reject ;