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

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

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

Эти данные показывают Уменьшать фазу алгоритма mapreduce.

Уменьшать фаза алгоритма mapreduce имеет следующие шаги:

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

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

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

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

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

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

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

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

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

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

  • 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 в папке toolbox/matlab/demos.

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

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

type maxArrivalDelayReducer.m
function maxArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MaxMapreduceExample.

% Copyright 2014 The MathWorks, Inc.

% 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);

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

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

type statsByGroupReducer.m
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.

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

| | | | |

Похожие темы

Была ли эта тема полезной?