В этом примере показано, как найти максимальное значение одной переменной в наборе данных с помощью mapreduce. Это демонстрирует самое простое использование mapreduce с тех пор существует только один ключевой и минимальный расчет.
Создайте datastore с помощью airlinesmall.csv набор данных. Этот набор данных на 12 мегабайтов содержит 29 столбцов информации о рейсе для нескольких поставщиков услуг авиакомпании, включая прибытие и время отправления. В этом примере выберите ArrDelay (задержка прибытия рейса) как переменная интереса.
ds = tabularTextDatastore('airlinesmall.csv', 'TreatAsMissing', 'NA'); ds.SelectedVariableNames = 'ArrDelay';
Datastore обрабатывает 'NA' значения как пропавшие без вести и замены отсутствующие значения с NaN значения по умолчанию. Кроме того, SelectedVariableNames свойство позволяет вам работать только с выбранной переменной интереса, который можно проверить использование preview.
preview(ds)
ans=8×1 table
ArrDelay
________
8
8
21
13
4
59
3
11
mapreduce функция требует функции карты и уменьшать функции как входные параметры. Картопостроитель получает блоки данных и выходные промежуточные результаты. Редуктор читает, промежуточное звено заканчивается и приводит к конечному результату.
В этом примере картопостроитель находит максимальную задержку прибытия каждого блока данных. Картопостроитель затем хранит эти максимальные значения как промежуточные значения, сопоставленные с ключом 'PartialMaxArrivalDelay'.
Отобразите файл функции карты.
function maxArrivalDelayMapper (data, info, intermKVStore) partMax = max(data.ArrDelay); add(intermKVStore, 'PartialMaxArrivalDelay',partMax); end
Редуктор получает список максимальных задержек прибытия каждого блока и находит полную максимальную задержку прибытия из списка значений. mapreduce только вызывают этот редуктор однажды, поскольку картопостроитель только добавляет один уникальный ключ. Редуктор использует add добавить итоговую пару "ключ-значение" в выход.
Отобразите уменьшать файл функции.
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 применять map и reduce функции к datastore, ds.
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 возвращает datastore, maxDelay, с файлами в текущей папке.
Считайте конечный результат из выходного datastore, maxDelay.
readall(maxDelay)
ans=1×2 table
Key Value
___________________ ________
{'MaxArrivalDelay'} {[1014]}
Перечисленный здесь map и reduce функции что mapreduce применяется к данным.
function maxArrivalDelayMapper (data, info, intermKVStore) partMax = max(data.ArrDelay); add(intermKVStore, 'PartialMaxArrivalDelay',partMax); end %-------------------------------------------------------------------- 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 | tabularTextDatastore