2013-08-07 13 views
6

Ich lerne jetzt, wie man Hadoop Pig jetzt benutzt.Hadoop Pig count Nummer

Wenn ich eine Eingabedatei wie folgt aus:

a,b,c,true 
s,c,v,false 
a,s,b,true 
... 

Das letzte Feld ist diejenige, die ich zählen müssen ... Also ich möchte wissen, wie viele ‚wahr‘ und ‚falsch‘ in dieser Datei .

Ich versuche:

records = LOAD 'test/input.csv' USING PigStorage(','); 
boolean = foreach records generate $3; 
groups = group boolean all; 

Jetzt werde ich stecken. Ich möchte verwenden:

count = foreach groups generate count('true');" 

Um die Anzahl der „true“ zu bekommen, aber ich bekomme immer die Fehlermeldung:

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

mir jemand kann sagen, wo ist das Problem?

Antwort

10

Zwei Dinge. Erstens sollte count eigentlich COUNT sein. Bei Schweinen sollten alle eingebauten Funktionen mit Großbuchstaben aufgerufen werden.

Zweitens, COUNT zählt die Anzahl der Werte in einer Tasche, nicht für einen Wert. Daher sollten Sie Gruppe von wahr/falsch, dann COUNT:

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

So, jetzt die Ausgabe eines DUMP für counts wird wie etwas aussehen:

(true, 2) 
(false, 1) 

Wenn Sie die Grafen von wahr und falsch wollen in ihren eigenen Beziehungen können Sie dann FILTER die Ausgabe von counts. Allerdings würde es wahrscheinlich zu SPLITboolean besser sein, dann tut zwei separate Zählungen:

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

Dank, es funktioniert! – user2597504

Verwandte Themen