Запись уменьшать функции

Роль уменьшать функции в MapReduce

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

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

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

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

  2. Для каждого ключа, mapreduce создает ValueIterator объект, который содержит все значения, сопоставленные с тем ключом.

  3. Уменьшать функция просматривает значения путем прокрутки от ValueIterator объект с помощью hasnext и getnext функции, которые обычно используются в while цикл.

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

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

Требования для уменьшают функцию

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

Входными параметрами к уменьшать функции является intermKey, intermValIter, и outKVStore:

  • intermKey один из уникальных ключей, добавленных функцией карты. Каждый вызов уменьшать функции mapreduce задает новый уникальный ключ от ключей в промежуточном KeyValueStore объект.

  • intermValIter ValueIterator объект сопоставлен с активным ключом, intermKey. Этот ValueIterator объект содержит все значения, сопоставленные с активным ключом. Просмотрите значения путем прокрутки с помощью hasnext и getnext функции.

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

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

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

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

  3. Если OutputType аргумент mapreduce 'Binary' (значение по умолчанию), затем значение, добавленное уменьшать функцией, может быть любым объектом MATLAB®, включая все допустимые типы данных MATLAB.

  4. Если OutputType аргумент mapreduce 'TabularText', затем значение, добавленное уменьшать функцией, может быть числовым скаляром, вектором символов или строкой. В этом случае значением не может быть NaN, комплексный, логический, или разреженный.

Примечание

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

Выборка уменьшает функции

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

Функция простого уменьшения

Одним из самых простых примеров редуктора является maxArrivalDelayReducer, который является редуктором для примера, Находят Максимальное значение с MapReduce. Функция карты в этом примере находит максимальную задержку прибытия каждого фрагмента входных данных. Затем уменьшать функция закончила задачу путем нахождения одного максимального значения среди всех промежуточных максимумов. Чтобы найти максимальное значение, редуктор просматривает значения путем прокрутки в ValueIterator возразите и сравнивает каждое значение с текущим максимумом. mapreduce только вызывает эту функцию редуктора однажды, поскольку картопостроитель добавляет один уникальный ключ в промежуточный KeyValueStore объект. Уменьшать функция добавляет одну пару "ключ-значение" в выход.

function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore)
  % intermKey is 'PartialMaxArrivalDelay'. intermValIter is an iterator of
  % all values that has the key 'PartialMaxArrivalDelay'.
  maxVal = -Inf;
  while hasnext(intermValIter)
    maxVal = max(getnext(intermValIter), maxVal);
  end
  % The key-value pair added to outKVStore will become the output of mapreduce 
  add(outKVStore,'MaxArrivalDelay',maxVal);
end

Усовершенствованный уменьшают функцию

Более усовершенствованным примером редуктора является statsByGroupReducer, который является редуктором для примера Вычисление сводной статистики Группы Используя MapReduce. Функция карты в этом примере группирует данные в каждом входе с помощью дополнительного параметра (поставщик услуг авиакомпании, месяц, и так далее), и затем вычисляет несколько статистических количеств для каждой группы данных. Уменьшать функция закончила задачу путем получения статистических количеств и конкатенации их в длинные векторы, и затем использования векторов, чтобы вычислить итоговые статистические количества для количества, среднего значения, отклонения, скошенности и эксцесса. Редуктор хранит эти значения как поля в структуре, так, чтобы каждый уникальный ключ имел структуру статистических количеств в выходе.

function statsByGroupReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the StatisticsByGroupMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

n = [];
m = [];
v = [];
s = [];
k = [];

% get all sets of intermediate statistics
while hasnext(intermValIter)
    value = getnext(intermValIter);
    n = [n; value(1)];
    m = [m; value(2)];
    v = [v; value(3)];
    s = [s; value(4)];
    k = [k; value(5)];
end
% Note that this approach assumes the concatenated intermediate values fit
% in memory. Refer to the reducer function, covarianceReducer,  of the
% CovarianceMapReduceExample for an alternative pairwise reduction approach

% combine the intermediate results
count = sum(n);
meanVal = sum(n.*m)/count;
d = m - meanVal;
variance = (sum(n.*v) + sum(n.*d.^2))/count;
skewnessVal = (sum(n.*s) + sum(n.*d.*(3*v + d.^2)))./(count*variance^(1.5));
kurtosisVal = (sum(n.*k) + sum(n.*d.*(4*s + 6.*v.*d +d.^3)))./(count*variance^2);

outValue = struct('Count',count, 'Mean',meanVal, 'Variance',variance,...
                 'Skewness',skewnessVal, 'Kurtosis',kurtosisVal);

% add results to the output datastore
add(outKVStore,intermKey,outValue);

Больше уменьшает функции

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

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

| | | | |

Похожие темы