2016-04-19 9 views
-1

注文が有効または無効であることを示す以下のようなデータファイルがあります。有効な注文の数と無効な注文の数を計算したいと思います。PigとHiveの列の異なる値を数える方法

1,flipkart,pepsi,invalid 
2,flipkart,tshirt,valid 
3,flipkart,shirt,valid 
4,amazon,shoe,valid 
5,amazon,beer,invalid 
6,flipkart,jewels,valid 
7,flipkart,coke,invalid 

だから、最終的な出力は

  1. どのように多くの有効および無効なレコードの数は全く

    例:のようにする必要があります:有効:7、フリップカートに無効な3

  2. 、有効なレコードと無効なレコードの数、およびアマゾンの有効レコードと無効レコードの数。

    例:フリップカート:有効な3、無効:2 アマゾン:有効1、無効:PIGで1

+1

があなたの豚のスクリプトですか? –

答えて

0

からid,name,pp,state

byNameState = GROUP my_data BY (Name, State); 
byNameStateCounts = FOREACH byNameState GENERATE 
COUNT(my_data) AS ccc; 
として列名を仮定し groupByForEach

を実行します。

0

期待される出力のために以下のスクリプトを試すことができます:

質問1について

回答:質問2について

a = load'/home/abhijit/Downloads/movies.txt' USING PigStorage(',') AS (id:int,companyName:chararray,item:chararray,state:chararray); 

Dump a; 

(1,flipkart,pepsi,invalid) 
(2,flipkart,tshirt,valid) 
(3,flipkart,shirt,valid) 
(4,amazon,shoe,valid) 
(5,amazon,beer,invalid) 
(6,flipkart,jewels,valid) 
(7,flipkart,coke,invalid) 

grp = group a by state; 
dump grp; 

(valid,{(2,flipkart,tshirt,valid),(3,flipkart,shirt,valid),(4,amazon,shoe,valid),(6,flipkart,jewels,valid)}) 
(invalid,{(1,flipkart,pepsi,invalid),(5,amazon,beer,invalid),(7,flipkart,coke,invalid)}) 

cnt = foreach grp generate $0, COUNT($1); 
dump cnt; 

(valid,4) 
(invalid,3) 

回答:

grp2 = group a by (companyName,state); 
dump grp2; 

((amazon,valid),{(4,amazon,shoe,valid)}) 
((amazon,invalid),{(5,amazon,beer,invalid)}) 
((flipkart,valid),{(2,flipkart,tshirt,valid),(3,flipkart,shirt,valid),(6,flipkart,jewels,valid)}) 
((flipkart,invalid),{(1,flipkart,pepsi,invalid),(7,flipkart,coke,invalid)}) 


cnt2 = foreach grp2 generate $0, COUNT($1); 
dump cnt2; 

((amazon,valid),1) 
((amazon,invalid),1) 
((flipkart,valid),3) 
((flipkart,invalid),2) 
関連する問題