Запись функции карты

Роль функции карты в MapReduce

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

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

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

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

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

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

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

Требования для функции карты

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

Входными параметрами к функции карты является dataинформация, и intermKVStore:

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

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

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

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

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

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

Примечание

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

Демонстрационные функции карты

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

Единичная функция карты

Функция карты, которая просто возвращается что mapreduce передачи в него называются единичным картопостроителем. Единичный картопостроитель полезен, чтобы использовать в своих интересах группировку значений уникальным ключом прежде, чем выполнить в вычислениях уменьшать функция. identityMapper файл картопостроителя является одним из картопостроителей, используемых в примере Высокий Тощий QR (TSQR) Матричная Факторизация Используя 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. Для каждого фрагмента входных данных этот картопостроитель вычисляет максимальную задержку прибытия и добавляет пару "ключ-значение" в промежуточный KeyValueStore.

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

Усовершенствованная функция карты

Более усовершенствованным примером картопостроителя является statsByGroupMapper, который является картопостроителем для примера Вычисление сводной статистики Группы Используя MapReduce. Этот картопостроитель использует вложенную функцию, чтобы вычислить несколько статистических количеств (количество, среднее значение, отклонение, и так далее) для каждого фрагмента входных данных, и затем добавляет несколько пар "ключ-значение" в промежуточный KeyValueStore объект. Кроме того, этот картопостроитель использует четыре входных параметра, тогда как mapreduce только принимает функцию карты с тремя входными параметрами. Чтобы обойти это, передайте в дополнительном параметре с помощью анонимной функции во время вызова 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

Больше функций карты

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

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

| | |

Похожие темы