考虑我有一个带元组的数据集(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,我可以使用表达式作为分组键。我在这里会遗漏一些东西,还是在猪身上对待空值?
答案 0 :(得分:1)
布尔数据类型为introduced in Pig 0.10。表达式f1 is null
是一个布尔值,因此它不能作为关系中的字段出现,如果它是group
的值,它就会出现。在Pig 0.10之前,布尔运算只能用于FILTER
语句或三元运算符,正如您在解决方法中所示。
虽然我没有尝试过这个,但大概是如果你在Pig 0.10或更高版本中尝试同样的事情,你原来的尝试就会成功。