Hadoop清管器计数

Hadoop清管器计数,hadoop,mapreduce,apache-pig,Hadoop,Mapreduce,Apache Pig,我现在正在学习如何使用Hadoop Pig 如果我有这样一个输入文件: a,b,c,true s,c,v,false a,s,b,true ... 最后一个字段是我需要计算的字段。。。所以我想知道这个文件中有多少“真”和“假” 我尝试: records = LOAD 'test/input.csv' USING PigStorage(','); boolean = foreach records generate $3; groups = group boolean all; 现在我被卡住了

我现在正在学习如何使用Hadoop Pig

如果我有这样一个输入文件:

a,b,c,true
s,c,v,false
a,s,b,true
...
最后一个字段是我需要计算的字段。。。所以我想知道这个文件中有多少“真”和“假”

我尝试:

records = LOAD 'test/input.csv' USING PigStorage(',');
boolean = foreach records generate $3;
groups = group boolean all;
现在我被卡住了。我想使用:

count = foreach groups generate count('true');" 
要获得“true”的数字,但我总是会得到错误:

2013-08-07 16:32:36677[main]错误org.apache.pig.tools.grunt.grunt -错误1070:无法使用导入解析计数:[,org.apache.pig.builtin.,org.apache.pig.impl.builtin.] 日志文件中的详细信息:/etc/pig/pig1375911119028.log


有人能告诉我问题出在哪里吗

两件事。首先,
count
实际上应该是。在pig中,所有内置函数都应使用所有CAP调用

其次,
COUNT
统计一个包中的值的数量,而不是一个值。因此,您应该按真/假分组,然后按计数进行分组:

boolean = FOREACH records GENERATE $3 AS trueORfalse ;
groups = GROUP boolean BY trueORfalse ;
counts = FOREACH groups GENERATE group AS trueORfalse, COUNT(boolean) ;
因此,现在
计数的
转储的输出将类似于:

(true, 2)
(false, 1)
如果您希望在其各自的关系中使用true和false计数,则可以使用
计数的输出。但是,最好是
布尔值
,然后分别进行两次计数:

boolean = FOREACH records GENERATE $3 AS trueORfalse ;
SPLIT boolean INTO alltrue IF trueORfalse == 'true', 
                   allfalse IF trueORfalse == 'false' ;

tcount = FOREACH (GROUP alltrue ALL) GENERATE COUNT(alltrue) ;
fcount = FOREACH (GROUP allfalse ALL) GENERATE COUNT(allfalse) ;