Вычисление среднего значения с MapReduce

Этот пример показывает, как вычислить среднее значение единственной переменной в наборе данных с помощью mapreduce. Это демонстрирует простое использование mapreduce с одним ключевым, минимальным вычислением и промежуточное состояние (накапливающий промежуточную сумму и количество).

Подготовка данных

Создайте datastore с помощью набора данных airlinesmall.csv. Этот набор данных на 12 мегабайтов содержит 29 столбцов информации о полете для нескольких поставщиков услуг авиакомпании, включая прибытие и время отправления. В этом примере выберите ArrDelay (задержка прибытия полета) как переменная интереса.

ds = datastore('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 требует функции карты и уменьшать функции как входные параметры. Картопостроитель получает фрагменты данных и выходных промежуточных результатов. Редуктор читает, промежуточное звено заканчивается и приводит к конечному результату.

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

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

function meanArrivalDelayMapper (data, info, intermKVStore)
% Mapper function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% Data is an n-by-1 table of the ArrDelay. Remove missing value first:
data(isnan(data.ArrDelay),:) = [];

% Record the partial counts and sums and the reducer will accumulate them.
partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];
add(intermKVStore, 'PartialCountSumDelay',partCountSum);

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

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

function meanArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% intermKey is 'PartialCountSumDelay'
count = 0;
sum = 0;
while hasnext(intermValIter)
   countSum = getnext(intermValIter);
   count = count + countSum(1);
   sum = sum + countSum(2);
end

meanDelay = sum/count;

% The key-value pair added to outKVStore will become the output of mapreduce 
add(outKVStore,'MeanArrivalDelay',meanDelay);

Используйте mapreduce, чтобы применить карту и уменьшить функции до datastore, ds.

meanDelay = mapreduce(ds, @meanArrivalDelayMapper, @meanArrivalDelayReducer);
********************************
*      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, meanDelay, с файлами в текущей папке.

Считайте конечный результат из выходного datastore, meanDelay.

readall(meanDelay)
ans =

  1x2 table

           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

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

|

Похожие темы

Была ли эта тема полезной?