MapReduce로 최댓값 찾기
R2026b이 예제에서는 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]}
참고 항목
mapreduce | tabularTextDatastore