Main Content

MapReduce로 최댓값 찾기

이 예제에서는 mapreduce를 사용하여 데이터 세트에서 단일 변수의 최댓값을 찾는 방법을 보여줍니다. 하나의 키와 최소한의 계산만 있으므로 mapreduce의 가장 간단한 사용법을 보여줍니다.

데이터 준비하기

airlinesmall.csv 데이터 세트를 사용하여 데이터저장소를 만듭니다. 이 12메가바이트 데이터 세트에는 도착 시간과 출발 시간 등의 여러 항공사에 대한 29개 열의 비행 정보가 들어 있습니다. 이 예제에서는 ArrDelay(항공편 도착 지연)를 관심 변수로 선택합니다.

ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA');
ds.SelectedVariableNames = 'ArrDelay';

데이터저장소는 'NA' 값을 누락된 것으로 취급하고 기본적으로 누락값을 NaN 값으로 바꿉니다. 또한, SelectedVariableNames 속성을 사용하면 선택한 관심 변수만 사용할 수 있으며 이는 preview를 사용하여 확인할 수 있습니다.

preview(ds)
ans=8×1 table
    ArrDelay
    ________

        8   
        8   
       21   
       13   
        4   
       59   
        3   
       11   

MapReduce 실행하기

mapreduce 함수에는 입력값으로 map 함수와 reduce 함수가 필요합니다. 매퍼는 데이터 블록을 받아 중간 결과를 출력합니다. 리듀서는 중간 결과를 읽고 최종 결과를 생성합니다.

이 예제에서 매퍼는 각 데이터 블록에서 최대 도착 지연을 찾습니다. 그런 다음 매퍼는 이 최댓값을 키 'PartialMaxArrivalDelay'와 연결된 중간값으로 저장합니다.

map 함수 파일을 표시합니다.

function maxArrivalDelayMapper (data, info, intermKVStore)
  partMax = max(data.ArrDelay);
  add(intermKVStore, 'PartialMaxArrivalDelay',partMax);
end

리듀서는 각각의 블록에 대한 최대 도착 지연의 목록을 받고 이 값 목록에서 전체적인 최대 도착 지연을 찾습니다. 매퍼는 하나의 고유 키만 추가하므로 mapreduce는 이 리듀서를 한 번만 호출합니다. 리듀서는 add를 사용하여 최종 키-값 쌍을 출력값에 추가합니다.

reduce 함수 파일을 표시합니다.

function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore)
  % intermKey is 'PartialMaxArrivalDelay'. intermValIter is an iterator of
  % all values that has the key 'PartialMaxArrivalDelay'.
  maxVal = -Inf;
  while hasnext(intermValIter)
    maxVal = max(getnext(intermValIter), maxVal);
  end
  % The key-value pair added to outKVStore will become the output of mapreduce 
  add(outKVStore,'MaxArrivalDelay',maxVal);
end

mapreduce를 사용하여 데이터저장소 ds에 map 함수와 reduce 함수를 적용합니다.

maxDelay = mapreduce(ds, @maxArrivalDelayMapper, @maxArrivalDelayReducer);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  16% Reduce   0%
Map  32% Reduce   0%
Map  48% Reduce   0%
Map  65% Reduce   0%
Map  81% Reduce   0%
Map  97% Reduce   0%
Map 100% Reduce   0%
Map 100% Reduce 100%

mapreduce는 현재 폴더에 있는 파일과 함께 데이터저장소 maxDelay를 반환합니다.

출력 데이터저장소 maxDelay에서 최종 결과를 읽어 옵니다.

readall(maxDelay)
ans=1×2 table
            Key             Value  
    ___________________    ________

    {'MaxArrivalDelay'}    {[1014]}

참고 항목

|

관련 항목