2017-03-10 8 views
0

以下のテストデータがあります。豚のカラム間のフィールドの合計

A B C 

M O 

M M M 

M M M 

N  O 

P  N 

Iはまた、M = 7、N = 2、O = 2、P = 1のような、これらの値のそれぞれの数を取得したいと思います。ここで、A、B、Cは列見出しです。私は以下のコードを書いています。

test= LOAD 'testdata' USING PigStorage(',') as(A:chararray,B:chararray,C:chararray); 
values = FOREACH test GENERATE A==''?'null':(A is null?'null':A)) as A,(B==''?'null':(B is null?'null':B)) as B,(C==''?'null':(C is null?'null':C)) as C; 
grp = GROUP values ALL; 
A = FOREACH grp { 
B =FILTER test.A=='M' OR test.B=='M' OR test.C=='M'; 
C =FILTER test.A=='N' OR test.B=='N' OR test.C=='N'; 
D =FILTER test.A=='O' OR test.B=='O' OR test.C=='O'; 
E =FILTER test.A=='P' OR test.B=='P' OR test.C=='P'; 
GENERATE group, COUNT(B), COUNT(C),COUNT(D),COUNT(E); 
    }; 

「出力に複数の行があります」というエラーが表示されます。 入力があれば助かります!

答えて

1

は、行としてデータをロードフィールドをトークン化した後、私は (A:chararray、B:chararray、C:chararray)、複数のフィールドを横切ってカウントを取得したい

A = load 'testdata' as (line:chararray); 
B = foreach A generate flatten(TOKENIZE((chararray)line)) as word; 
C = group B by word; 
D = foreach C generate group,COUNT(B); 
DUMP D; 
+0

を数えます。上記のような1つのフィールドだけではありません。 –

+0

スクリプトを実行したことがありますか?単語ごとにグループ化すると、それぞれのユニークなキャラクタがグループ化され、各キャラクタの数がカウントされます。 –

+0

それはうまくいった。私は '行'を単一のフィールドにして、トークン化chararrayの平坦化を実現するものではないと仮定しました。 –

関連する問題