2016-11-08 5 views
0

fnameとlastnameのデータをグループ化する必要があります。 idフィールドで豚のグループ機能でbincode演算子を使う方法

(fnameは、LNAME、ID)

abc,xyz,I 
abc,xyz,N 
ppp,xxx,I 
ppp,XXX,I 

私は2つの値を期待しています、私は同じfnameのためにNとIの両方を得れば、私はIDを使用する必要がありますので、LNAMEの組み合わせをNまたはI、すなわちNがグループ内で与えられているようにidフィールドにvalueを使用する必要があるためです。

私は結果の下に期待しています:

abc,xyz,N 
ppp,xxx,I 

私は

in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray); 

grp = group in by (fname,lname); 

z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) >1 ? ('N') :BagToTuple(in.id))as id; 

をコードの下にしようとしたと

その作業罰金てきたしかし、今私が代わりにカウントのidフィールドの値をチェックする必要があります。

z = foreach grp generate FLATTEN(group) AS (fname,lname),((in.id == 'N' or in.id == 'I') ? ('N') :BagToTuple(in.id))as id; 

ただし、以下のエラーが表示されます。

(Name: Equal Type: null Uid: null)incompatible types in Equal Operator left hand side:bag :tuple(id:chararray) right hand side:chararray 

エラー以下の寄付は、しかし:

Two inputs of BinCond must have compatible schemas. left hand side: #31:tuple(#32:chararray) right hand side: org.apache.pig.builtin.bagtotuple_3#35:tuple(id#36:int) 

+0

チェックこのhttp://stackoverflow.com/questions/18086768/pig-filter-returns-empty-bag-that-i-cant-count – BruceWayne

答えて

0

を案内してくださいあなたは、すなわちN、I int型の列に文字を含むフィールドをロードしていますか? id列の型がchararrayのloadステートメントを変更します。

in =load '/testing/name.txt' USING PigStorage(',') as (fname:chararray,lname:chararray,id:chararray); 
grp = group in by (fname,lname); 
z = foreach grp generate FLATTEN(group) AS (fname,lname),(COUNT(in.id) > 1 && in.id matches 'N') ? ('N') : in.id; 
+0

変更BagToTuple(in.id))内へのidとしてidがidである –

関連する問題