2017-05-04 10 views
0

저는 확실히 초보자입니다. 쉬운 대답이있을 것입니다. 내 코드는 다음과 같습니다하이브 테이블에서로드 된 "a, b, c"형식의 단일 열을 어떻게 그룹화 할 수 있습니까?

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

:

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

하이브에 위치 열은 다음과 같습니다 이것은 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

가정 평가 당신이에로드되는 열 중 하나입니다, 당신은

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을 사용해야합니다