2011-03-07 1 views
8

파일에서로드하는 레코드 세트가 있습니다. 가장 먼저해야 할 일은 최대 및 최소 컬럼을 얻는 것입니다. SQL에서이 같은 하위 쿼리 함께 할 것입니다 :돼지의 모든 레코드 집합에 대한 최대/최소

select c.state, c.population, 
(select max(c.population) from state_info c) as max_pop, 
(select min(c.population) from state_info c) as min_pop 
from state_info c 

는 내가 거기뿐만 아니라 돼지에서이 작업을 수행 할 수있는 쉬운 방법이어야하지만 난 그것을 찾는 데 문제가 가정합니다. 그것은 최대 및 최소 기능이 있지만 다음 일을 시도 할 때 작동하지 않았다 :

이 작동하지 않았다. 행마다 동일한 값을 가진 추가 열을 추가 한 다음 해당 열을 그룹화하는 것이 더 좋습니다. 그런 다음 새 그룹을 최대한 활용하십시오. 이것은 내가 원하는 것을 얻는 복잡한 방식처럼 보입니다. 그래서 누군가가 더 간단한 방법을 알고 있는지 물어볼 것이라고 생각했습니다.

도움을 미리 감사드립니다.

답변

15

모든 데이터를 그룹화해야하지만 GROUP ALL을 사용하는 경우 추가 열은 필요하지 않습니다.

돼지

records = LOAD 'states.txt' AS (state:chararray, population:int); 
records_group = GROUP records ALL; 
with_max = FOREACH records_group 
      GENERATE 
       FLATTEN(records.(state, population)), MAX(records.population); 

입력

CA 10 
VA 5 
WI 2 

출력

(CA,10,10) 
(VA,5,10) 
(WI,2,10) 
+0

감사합니다 - 내가 거기에 알고 그렇게 할 수있는 간단한 방법이 될했다. – Winter