복붙노트

[HADOOP] PIG의 모든 레코드 집합에 대한 최대 / 최소

HADOOP

PIG의 모든 레코드 집합에 대한 최대 / 최소

필자는 파일에서로드하는 일련의 레코드 집합을 가지고 있으며, 필자가해야 할 첫 번째 작업은 열의 최대 값과 최소값을 얻는 것입니다. 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

나는 PIG에서도 이것을 할 수있는 쉬운 방법이 있어야한다고 생각하지만 그것을 찾는 데 문제가 있습니다. 그것은 최대 및 최소 기능을 가지고 있지만 다음 일을 시도했을 때 작동하지 않았다 :

records=LOAD '/Users/Winter/School/st_incm.txt'  AS (state:chararray, population:int);
with_max = FOREACH records GENERATE state, population, MAX(population);

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

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

해결법

  1. ==============================

    1.GROUP ALL을 사용하는 경우 모든 데이터를 함께 그룹화해야하지만 추가 열은 필요하지 않다고 말한 것입니다.

    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)
    
  2. from https://stackoverflow.com/questions/5223475/max-min-for-whole-sets-of-records-in-pig by cc-by-sa and MIT license