1
나는 데이터는 아래와 같이있다 :돼지에서 2 위를 어떻게 찾습니까?
USA,10
UK,8
INDIA,8
PAKISTAN,5
U.A.E,3
GERMANY,3
SWEDEN,2
어떻게 상단이 가장 높은 평가 국가를받을 수 있나요? 위의 샘플 데이터를 사용하면 다음을 원합니다.
UK,8
INDIA,8
나는 데이터는 아래와 같이있다 :돼지에서 2 위를 어떻게 찾습니까?
USA,10
UK,8
INDIA,8
PAKISTAN,5
U.A.E,3
GERMANY,3
SWEDEN,2
어떻게 상단이 가장 높은 평가 국가를받을 수 있나요? 위의 샘플 데이터를 사용하면 다음을 원합니다.
UK,8
INDIA,8
시도해 볼 수 있습니까?
UPDATE :
네이티브 돼지를 사용하여이 문제를 해결하기 위해 다음 매우 어려운 당신의 돼지 버전 RANK
연산자가없는 경우. 하나의 옵션은 pig-0.11.1.jar
을 다운로드하여 클래스 경로에 설정하고 아래 접근 방법을 시도하십시오.
USA,10
UK,8
INDIA,8
PAKISTAN,5
U.A.E,3
GERMANY,3
SWEDEN,2
input.txt를 PigScript :
DEFINE MyOver org.apache.pig.piggybank.evaluation.Over('myrank:int');
DEFINE MyStitch org.apache.pig.piggybank.evaluation.Stitch;
A = LOAD 'input.txt' USING PigStorage(',') AS (country:chararray,rating:int);
B = GROUP A ALL;
C = FOREACH B {
mysort = ORDER A BY rating DESC;
GENERATE FLATTEN(MyStitch(mysort,MyOver(mysort,'dense_rank',0,1,1)));
}
D = FILTER C BY stitched::myrank==2;
E = FOREACH D GENERATE stitched::country AS country,stitched::rating AS rating;
DUMP E;
출력 :
(UK,8)
(INDIA,8)
돼지 버전> (11) 지원 RANK 연산자
A = LOAD 'input.txt' USING PigStorage(',') AS (country:chararray,rating:int);
B = RANK A BY rating DESC;
C = FILTER B BY rank_A==2;
D = FOREACH C GENERATE country,rating;
DUMP D;
출력 :
(UK,8)
(INDIA,8)
내 하둡 돼지 버전은 내가 RANK을 사용할 수없는 나는, 0.8.0입니다. –
또 다른 접근 방법을 업데이트했습니다.이 방법이 도움이되기를 바랍니다. –