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]}
참고 항목
mapreduce
| tabularTextDatastore