Apache pig 猪的分组表达

Apache pig 猪的分组表达,apache-pig,Apache Pig,假设我有一个具有元组(f1,f2)的数据集。我想把我的数据放在两个袋子里:一个是fi为null,另一个是f1值不为null。我尝试: raw = LOAD 'somedata' USING PigStorage() AS (f1:chararray, f2:chararray); raw_group = GROUP raw BY f1 is null; raw_count = FOREACH raw_group GENERATE group, COUNT_STAR(raw); 我希望得到两组密

假设我有一个具有元组(f1,f2)的数据集。我想把我的数据放在两个袋子里:一个是fi为null,另一个是f1值不为null。我尝试:

raw = LOAD 'somedata' USING PigStorage() AS (f1:chararray, f2:chararray);
raw_group = GROUP raw BY f1 is null;
raw_count = FOREACH raw_group GENERATE group, COUNT_STAR(raw);
我希望得到两组密钥为true和false。当我在grunt中运行它时,我得到以下结果:

2013-12-26 14:56:10,958 [main] ERROR org.apache.pig.tools.grunt.Grunt - 
ERROR 1200: <line 1046, column 25>  Syntax error, unexpected symbol at or near 'f1'
,但我真的很想了解这里发生了什么,因为我刚开始学猪。根据Pig的说法,我可以使用表达式作为分组键。我是否在这里遗漏了一些内容,或者在Pig中对空值的处理有所不同?

布尔数据类型是。表达式
f1为空
是一个布尔值,因此它不能在关系中显示为字段,如果它是
的值,它就会这样做。在Pig 0.10之前,布尔只能在
FILTER
语句或三元运算符中使用,如您在解决方法中所示


虽然我还没有尝试过这一点,但如果您在Pig 0.10或更高版本中尝试相同的操作,您最初的尝试可能会成功。

您使用的是什么版本的Pig?布尔型直到最近才成为Pig中成熟的数据类型。你的变通方法似乎还不错。值得注意的是,在您的解决方案中,使用表达式作为分组键。版本0.9.2。我相信那里支持布尔人?请注意,这就是为什么我首先感到困惑的原因。我想了解发生了什么,因为我的数据集的不同部分有很多空值,这样的解决方法是额外的工作。
raw_group = GROUP raw BY (f1 is null)?0:1;