Нахождение максимального значения с MapReduce

Этот пример показывает, как найти максимальное значение одной переменной в наборе данных с помощью 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 =

  8x1 table

    ArrDelay
    ________

        8   
        8   
       21   
       13   
        4   
       59   
        3   
       11   

Выполнение mapreduce

Функция mapreduce требует функции карты и уменьшать функции как входные параметры. Картопостроитель получает фрагменты данных и выходных промежуточных результатов. Редуктор читает, промежуточное звено заканчивается и приводит к конечному результату.

В этом примере картопостроитель находит максимальную задержку прибытия каждого фрагмента данных. Картопостроитель затем хранит эти максимальные значения как промежуточные значения, сопоставленные с ключом 'PartialMaxArrivalDelay'.

Отобразите файл функции карты.

function maxArrivalDelayMapper (data, info, intermKVStore)
% Mapper function for the MaxMapreduceExample.

% Copyright 1984-2014 The MathWorks, Inc. 

% Data is an n-by-1 table of the ArrDelay. As the data source is tabular,
% the return of read is a table object.
partMax = max(data.ArrDelay);
add(intermKVStore, 'PartialMaxArrivalDelay',partMax);

Редуктор получает список максимальных задержек прибытия каждого фрагмента и находит полную максимальную задержку прибытия из списка значений. mapreduce только вызывает этот редуктор однажды, поскольку картопостроитель только добавляет один уникальный ключ. Редуктор использует add, чтобы добавить итоговую пару "ключ-значение" в вывод.

Отобразите уменьшать файл функции.

function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MaxMapreduceExample.

% Copyright 2014 The MathWorks, Inc.

% 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);

Используйте 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 =

  1x2 table

           Key           Value 
    _________________    ______

    'MaxArrivalDelay'    [1014]

Смотрите также

|

Похожие темы