Написание функции Map

Роль функции Map в MapReduce

mapreduce требует как входную функцию карты, которая получает блоки данных и которая выводит промежуточные результаты, так и входную функцию сокращения, которая читает промежуточные результаты и приводит к конечному результату. Таким образом, нормально разбивать вычисление на две связанные части для карты и уменьшать функции для выполнения отдельно. Для примера, чтобы найти максимальное значение в наборе данных, функция map может найти максимальное значение в каждом блоке входных данных, и тогда функция reduce может найти одно максимальное значение среди всех промежуточных максимумов.

Этот рисунок показывает фазу Map mapreduce алгоритм.

Фаза Map mapreduce алгоритм имеет следующие шаги:

  1. mapreduce считывает один блок данных с помощью read функция на входе datastore, затем вызывает функцию map для работы с блоком.

  2. Функция map затем работает с отдельным блоком данных и добавляет одну или несколько пары "ключ-значение" к промежуточному KeyValueStore использование объекта add или addmulti функций.

  3. mapreduce повторяет этот процесс для каждого из блоков данных в вход datastore, так что общее количество вызовов функции map равно количеству блоков данных. The ReadSize свойство datastore определяет количество блоков данных.

Фаза Map mapreduce алгоритм завершен, когда функция map обрабатывает каждый из блоков данных в вход datastore. Результат этой фазы mapreduce алгоритм является KeyValueStore объект, который содержит все пары "ключ-значение", добавленные функцией map. После фазы Map, mapreduce готовится к фазе Reduce путем группировки всех значений в KeyValueStore объект уникальным ключом.

Требования к функции Map

mapreduce автоматически вызывает функцию map для каждого блока данных в вход datastore. Функция map должна удовлетворять определенным основным требованиям для правильного запуска во время этих автоматических вызовов. Эти требования коллективно обеспечивают надлежащее перемещение данных через фазу Map mapreduce алгоритм.

Входы в функцию map data, info, и intermKVStore:

  • data и info являются результатом вызова на read функцию на входе datastore, которая mapreduce выполняется автоматически перед каждым вызовом функции map.

  • intermKVStore - имя промежуточного KeyValueStore объект, к которому функция map должна добавить пар "ключ-значение". add и addmulti функции используют это имя объекта для добавления пар "ключ-значение". Если функция map не добавляет пар "ключ-значение" к intermKVStore объект, затем mapreduce не вызывает функцию reduce, и полученный datastore пуст.

В дополнение к этим основным требованиям к функции map, пары "ключ-значение", добавленные функцией map, должны также удовлетворять этим условиям:

  1. Ключи должны быть числовыми скалярами, векторами символов или строками. Числовые ключи не могут быть NaN, сложный, логический или разреженный.

  2. Все ключи, добавленные функцией map, должны иметь один и тот же класс.

  3. Значения могут быть любыми MATLAB® объект, включая все допустимые типы данных MATLAB.

Примечание

Вышеуказанные требования к паре "ключ-значение" могут отличаться при использовании других продуктов с mapreduce. Ознакомьтесь с документацией по соответствующему продукту, чтобы получить требования к паре "ключ-значение" продукта.

Примеры функций map

Вот несколько иллюстративных функций карты, используемых в mapreduce примеры.

Функция единичной карты

Функция map, которая просто возвращает то, что mapreduce проходит к нему называются тождества mapper. Identity mapper полезен, чтобы использовать преимущества группировки значений по уникальному ключу перед выполнением вычислений в функции reduce. The identityMapper mapper файла является одним из mapper, используемых в примере Tall Skinny QR (TSQR) Matrix Факторизации Использование MapReduce.

function identityMapper(data, info, intermKVStore)
  % This mapper function simply copies the data and add them to the
  % intermKVStore as intermediate values.
  x = data.Value{:,:};
  add(intermKVStore,'Identity', x);
end

Функция простой карты

Одним из простейших примеров отображения нетождеств является maxArrivalDelayMapper, который является отображателем для примера Найти максимальное значение с MapReduce. Для каждого фрагмента входных данных этот mapper вычисляет максимальную задержку прибытия и добавляет пару "ключ-значение" к промежуточному KeyValueStore.

function maxArrivalDelayMapper (data, info, intermKVStore)
  partMax = max(data.ArrDelay);
  add(intermKVStore, 'PartialMaxArrivalDelay',partMax);
end

Расширенная функция Map

Более продвинутый пример mapper statsByGroupMapper, который является отображателем для примера Вычисление сводной статистики по группам с использованием MapReduce. Этот mapper использует вложенную функцию, чтобы вычислить несколько статистических величин (количество, среднее значение, отклонение и так далее) для каждого фрагмента входных данных, а затем добавляет несколько пары "ключ-значение" к промежуточному KeyValueStore объект. Кроме того, этот mapper использует четыре входных параметров, тогда как mapreduce принимает только функцию map с тремя входными параметрами. Чтобы обойти это, передайте в дополнительном параметре с помощью анонимной функции во время вызова на mapreduce, как показано в примере.

function statsByGroupMapper(data, ~, intermKVStore, groupVarName)
  % Data is a n-by-3 table. Remove missing values first
  delays = data.ArrDelay;
  groups = data.(groupVarName);
  notNaN =~isnan(delays);
  groups = groups(notNaN);
  delays = delays(notNaN);
  % Find the unique group levels in this chunk
  [intermKeys,~,idx] = unique(groups, 'stable');
  % Group delays by idx and apply @grpstatsfun function to each group
  intermVals = accumarray(idx,delays,size(intermKeys),@grpstatsfun);
  addmulti(intermKVStore,intermKeys,intermVals);
  function out = grpstatsfun(x)
    n = length(x); % count
    m = sum(x)/n; % mean
    v = sum((x-m).^2)/n; % variance
    s = sum((x-m).^3)/n; % skewness without normalization
    k = sum((x-m).^4)/n; % kurtosis without normalization
    out = {[n, m, v, s, k]};
  end
end

Дополнительные функции map

Для получения дополнительной информации об общих шаблонах программирования в карте или сокращении функций, смотрите Создайте Эффективные Алгоритмы с MapReduce.

См. также

| | |

Похожие темы