通过在猪中表达分组

时间:2013-12-26 23:04:27

标签: apache-pig

考虑我有一个带元组的数据集(f1,f2)。我想把我的数据分成两个包:一个是fi为空,另一个是f1值不为空。我试试:

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'

我可以解决方法:

raw_group = GROUP raw BY (f1 is null)?0:1;

,但我真的很想了解这里发生了什么,因为我刚开始学习猪。根据Pig documentation,我可以使用表达式作为分组键。我在这里会遗漏一些东西,还是在猪身上对待空值?

1 个答案:

答案 0 :(得分:1)

布尔数据类型为introduced in Pig 0.10。表达式f1 is null是一个布尔值,因此它不能作为关系中的字段出现,如果它是group的值,它就会出现。在Pig 0.10之前,布尔运算只能用于FILTER语句或三元运算符,正如您在解决方法中所示。

虽然我没有尝试过这个,但大概是如果你在Pig 0.10或更高版本中尝试同样的事情,你原来的尝试就会成功。