我有一个文件,我正在加载到Pig和做一些很好的工作。一切都很顺利,直到我达到需要使用条件的程度,一种if-else语句。我想检查变量syn是否不为空,在这种情况下(如果为真),值将为1,否则将为0。
这是密码
B = foreach A generate t, (syn!='' ? 1 : 0) as s;
命令运行时没有任何问题,但当我转储结果时,会发生以下情况:
(8758.414086,)
(8758.457255,1)
所以当条件为真时,值被加到b上。但是,我似乎不明白为什么在地球上的其他部分被忽略,而不是添加0。任何帮助都将不胜感激。
编辑:对于任何感兴趣的人,我找到了一个解决方案,尽管最初的问题仍然存在。而不是 ==
接线员,我用过 B = foreach A generate t, (syn is not null ? 1 : 0) as s;
它就像一个魔咒。然而,我的问题仍然存在。
1条答案
按热度按时间ej83mcc01#
我想答案是here:1
null和load函数pig拉丁加载函数(例如,pigstorage和textloader)在缺少数据的地方生成null值。例如,不加载空字符串(chararray);相反,它们被null替换。
比较运算符如果任一子表达式为null,则结果为null。
因此,如果希望空字符串作为“”而不是null加载,则需要自定义加载程序。