mapreduce
требует и входной функции карты, которая получает блоки данных и то выходное промежуточное звено результаты, и вход уменьшает функцию, которая читает, промежуточное звено заканчивается и приводит к конечному результату. Таким образом нормально разбить вычисление в две связанных части для map и reduce функций, чтобы выполнить отдельно. Например, чтобы найти максимальное значение в наборе данных, функция карты может найти максимальное значение в каждом блоке входных данных, и затем уменьшать функция может найти одно максимальное значение среди всех промежуточных максимумов.
Этот рисунок показывает фазу Map mapreduce
алгоритм.
Фаза Map mapreduce
алгоритм имеет следующие шаги:
mapreduce
читает один блок данных с помощью read
функция на входном datastore, затем вызывает функцию карты, чтобы работать над блоком.
Функция карты затем работает над отдельным блоком данных и добавляет одну или несколько пар "ключ-значение" в промежуточный KeyValueStore
объект с помощью add
или addmulti
функции.
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 пуст.
В дополнение к этим основным требованиям для функции карты пары "ключ-значение", добавленные функцией карты, должны также удовлетворить этим условиям:
Ключи должны быть числовыми скалярами, векторами символов или строками. Числовыми ключами не может быть NaN
, комплексный, логический, или разреженный.
Все ключи, добавленные функцией карты, должны иметь тот же класс.
Значениями может быть любой 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.
mapreduce
| tabularTextDatastore
| add
| addmulti