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

Фаза карты mapreduce алгоритм содержит следующие этапы:
mapreduce считывает один блок данных с помощью read функция в хранилище входных данных, затем вызывает функцию отображения для работы с блоком.
Затем функция отображения работает с отдельным блоком данных и добавляет одну или несколько пар ключ-значение к промежуточному блоку. KeyValueStore с использованием add или addmulti функции.
mapreduce повторяет этот процесс для каждого из блоков данных во входном хранилище данных, так что общее количество вызовов функции отображения равно количеству блоков данных. ReadSize свойство хранилища данных определяет количество блоков данных.
Фаза карты mapreduce алгоритм завершается, когда функция отображения обрабатывает каждый из блоков данных во входном хранилище данных. Результат этой фазы mapreduce алгоритм является KeyValueStore объект, содержащий все пары ключ-значение, добавленные функцией карты. После фазы карты mapreduce готовится к фазе сокращения путем группирования всех значений в KeyValueStore по уникальному ключу.
mapreduce автоматически вызывает функцию отображения для каждого блока данных во входном хранилище данных. Функция карты должна соответствовать определенным основным требованиям для правильной работы во время этих автоматических вызовов. Эти требования в совокупности обеспечивают надлежащее перемещение данных через фазу карты mapreduce алгоритм.
Входные данные функции карты: data, info, и intermKVStore:
data и info являются результатом вызова read функция в хранилище входных данных, которая mapreduce выполняется автоматически перед каждым вызовом функции отображения.
intermKVStore - имя промежуточного KeyValueStore объект, к которому функция отображения должна добавить пары ключ-значение. add и addmulti функции используют это имя объекта для добавления пар ключ-значение. Если функция отображения не добавляет пары ключ-значение к intermKVStore объект, затем mapreduce не вызывает функцию уменьшения, и результирующее хранилище данных пусто.
В дополнение к этим основным требованиям для функции карты пары ключ-значение, добавляемые функцией карты, также должны удовлетворять следующим условиям:
Ключи должны быть числовыми скалярами, символьными векторами или строками. Числовые ключи не могут быть NaN, сложный, логический или разреженный.
Все ключи, добавленные функцией карты, должны иметь один и тот же класс.
Значениями могут быть любые объекты MATLAB ®, включая все допустимые типы данных MATLAB.
Примечание
Вышеуказанные требования к паре ключ-значение могут отличаться при использовании других продуктов с mapreduce. См. документацию по соответствующему продукту, чтобы получить требования к паре ключ-значение для конкретного продукта.
Вот несколько иллюстративных функций карты, используемых в mapreduce примеры.
Функция карты, которая просто возвращает то, что mapreduce passes to it называется сопоставителем идентификаторов. Средство отображения идентификаторов полезно использовать для группирования значений по уникальному ключу перед выполнением вычислений в функции уменьшения. identityMapper mapper file - один из сопоставителей, используемых в примере факторизации матрицы Tall Skinny 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.
add | addmulti | mapreduce | tabularTextDatastore