2011-12-08 1 views
2

돼지 결과를 정렬 한 다음 주문한 결과에 특정 항목이 어디에 있는지 확인할 수 있습니다. 예 :하둡 돼지 명령 결과; 주문 위치를 찾으십니까?

mydata = LOAD 'mydata.txt' AS (label:chararray, rank_score:float); 
ranked_data = ORDER mydata BY rank_score DESC; 
ranked_positions = FOREACH ranked_data GENERATE label, AUTO_INCREMENT_ID; 
results = FILTER ranked_data BY label = 'item1' OR label='item2'; 
DUMP results; 

AUTO_INCREMENT_ID 내 완벽한 세계에서 자동 증가합니다. mappers/reducers가 서로 독립적 인 방법을 감안할 때, Pig/Hadoop이 이것을 지원하지 않을 수도 있습니다. 그렇지 않다면 내 최종 결과를 생성하는 또 다른 방법을 생각해 낼 수 있습니까?

예 입력 :

item1  34.33 
item2  48.39 
item3  93.3 

원하는 출력 :

item1  3 
item2  2 

답변

1

1로 ORDER의 병렬 처리를 설정하면, 당신은 단지 UDF에서 자신을 자동 증가 할 수있다; 물론, 그것은 당신의 정렬을하기 위해서 단지 1 개의 감속기를 사용하는 바람직하지 않은 효과를 가져올 것입니다.

(또한 예제 출력을 어떻게 얻었는지 잘 모르겠습니다. 입력이 이미 주문 된 것으로 보이므로 item1은 id 1이어야하고 item 2는 id 2가 있어야합니다. 맞습니까? rank_score 내림차순?)

+0

감사합니다. 내림차순으로 주문 했으므로 적절하게 게시물을 업데이트했습니다. 하나의 감속기 경로 만 갈 수있는 것이 맞다고 생각합니다. 구문은 다음과 같습니다 :'ranked_data = ORDER mydata BY rank_score DESC PARALLEL 1;'? –

+0

예, 올바른 구문이 있습니다. – SquareCog