6

現在、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:36,677 [メイン] エラー org.apache.pig.tools.grunt.Grunt - エラー 1070: インポートを使用してカウントを解決できませんでした: [、org.apache.pig.builtin。、org.apache .pig.impl.builtin.] ログファイルの詳細: /etc/pig/pig_1375911119028.log

問題がどこにあるか誰か教えてもらえますか?

4

1 に答える 1

11

2つのこと。まず、count実際には である必要がありますCOUNT。pig では、すべての組み込み関数をすべて大文字で呼び出す必要があります。

次に、COUNT値ではなく、バッグ内の値の数をカウントします。したがって、true/false でグループ化してから、次のようにする必要がありますCOUNT

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

したがって、DUMPforの出力は次のcountsようになります。

(true, 2)
(false, 1)

独自の関係で true と false のカウントが必要な場合はFILTER、 の出力を使用できますcounts。ただし、次の 2 つの別々のカウントを行う方がよいでしょう。SPLIT boolean

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) ;
于 2013-08-07T23:11:59.477 に答える