2013-08-07 3 views
6

Hadoop Pig를 사용하는 법을 배우고 있습니다.Hadoop 돼지 카운트 번호

나는이 같은 입력 파일이있는 경우 :

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:36,677 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve count using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.] Details at logfile: /etc/pig/pig_1375911119028.log

아무도 말해 줄 수 있습니까?

답변

10

두 가지. 첫째, count은 실제로 COUNT이어야합니다. 돼지에서는 모든 내장 함수를 모두 대문자로 호출해야합니다.

둘째, COUNT은 값이 아닌 백의 값 수를 계산합니다. 따라서, 당신은 참/거짓, 다음 COUNT에 의해 그룹은해야 :

boolean = FOREACH records GENERATE $3 AS trueORfalse ; 
groups = GROUP boolean BY trueORfalse ; 
counts = FOREACH groups GENERATE group AS trueORfalse, COUNT(boolean) ; 

그래서 지금과 같은 모양 counts에 대한 DUMP의 출력 : 당신은 진실과 거짓의 수를 원하는 경우

(true, 2) 
(false, 1) 

을 자신의 관계에 FILTERcounts의 출력을하실 수 있습니다. 그러나, 아마 할 다음, 두 개의 별도의 카운트 SPLITboolean 더 나은 것 :

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) ; 
+0

감사합니다, 그것을 작동합니다! – user2597504