2017-05-04 5 views
0

私は間違いなく初心者ですが、簡単な答えがあります。私のコードは次のようになります。ハイブテーブルからロードされたフォーマット "a、b、c"の単一列でどのようにグループ化できますか?

A = load 'table1' USING org.apache.hive.hcatalog.pig.HCatLoader() as (userid1: chararray, location: chararray, age: int); 

ハイブ内の位置の列は次のようになります。

B= GROUP A BY location; 
C= FOREACH B GENERATE 
    group as location, 
    SUM(rating) as RatingSum, 
    AVG(rating) as RatingAverage, 
    MIN(rating) as RatingMin, 
    MAX(rating) as RatingMax, 
    COUNT(rating) as RecNum; 

をCは、おそらく、機能しません。city,state,country

これは私がやっているものですこれはBからの出力であるため、

(, ,,{(56072,, ,,,56072,1885171218,3),(104462,, ,,,104462,8486054060,7),(46927,, ,,47,46927,0749300523,0),(46927,, ,,47,46927,0749300515,0),(64139,, ,,,64139,8422665662,0),(112345,, ,,39,112345,0375727345,7),(151458,, ,,,151458,1551667959,0),(64139,, ,,,64139,8422676095,6)}) 
(ny, ,,{(175362,ny, ,,,175362,0446604844,10)}) 
(, usa,,{(223496,, usa,,,223496,0714838500,7)}) 
(gap, ,,{(211944,gap, ,,42,211944,044023722X,9),(211944,gap, ,,42,211944,1577486445,8),(211944,gap, ,,42,211944,0821767089,9),(211944,gap, ,,42,211944,0804106304,0),(211944,gap, ,,42,211944,0743412621,9),(211944,gap, ,,42,211944,0505521474,7),(211944,gap, ,,42,211944,0440236673,9),(211944,gap, ,,42,211944,0440225701,0),(211944,gap, ,,42,211944,044022165X,0),(211944,gap, ,,42,211944,0440214041,0),(211944,gap, ,,42,211944,0440213525,0),(211944,gap, ,,42,211944,044020111X,0),(211944,gap, ,,42,211944,0425151867,0),(211944,gap, ,,42,211944,0385472951,8),(211944,gap, ,,42,211944,0373832257,7),(211944,gap, ,,42,211944,0373471521,5),(211944,gap, ,,42,211944,0373291574,6),(211944,gap, ,,42,211944,0373291566,7),(211944,gap, ,,42,211944,0373201532,7),(211944,gap, ,,42,211944,0373151861,8),(211944,gap, ,,42,211944,158660242X,0)}) 
(n/a, ,,{(169489,n/a, ,,,169489,0618150730,6)}) 

私はロード・ステートメントを変更する必要がありますグループ化する前にステップを追加するか、または両方を追加しますが、失われます。助けてください。あなたが集めるように、元のハイブテーブルはセミコロンをセパレータとして使用してCSVから作成されました。それは場合に役立ちます、ここで私はハイブでテーブルを作成するために使用するコードです:

 create table table1 (UserID string, Location string, Age INT) 
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
    WITH SERDEPROPERTIES ("separatorChar" = '\u0059') STORED AS TEXTFILE 
tblproperties ("skip.header.line.count"="1"); 
+0

評価欄はどこから来ますか?あなたのロードには3つのフィールドがあり、いずれも評価されていません! –

答えて

0

と仮定すると、評価はあなたがAにロードされる列の一つですが、あなたは

C= FOREACH B GENERATE 
    group as location, 
    SUM(A.rating) as RatingSum, 
    AVG(A.rating) as RatingAverage, 
    MIN(A.rating) as RatingMin, 
    MAX(A.rating) as RatingMax, 
    COUNT(A.rating) as RecNum; 
C.

でA.ratingを使用する必要があります
関連する問題