mapreduce

Метод программирования для анализа наборов данных, которые не умещаются в памяти

Описание

пример

outds = mapreduce(ds,mapfun,reducefun) применяет функцию карты mapfun вводить datastore ds, и затем передает значения, сопоставленные с каждым уникальным ключом, чтобы уменьшать функциональный reducefun. Выходным datastore является KeyValueDatastore возразите что точки против .mat файлы в текущей папке.

outds = mapreduce(ds,mapfun,reducefun,mr) опционально задает параметры конфигурации во время выполнения для mapreduce. mr вход является результатом вызова mapreducer функция. Как правило, этот аргумент используется с Parallel Computing Toolbox™, MATLAB® Parallel Server™ или MATLAB Compiler™. Для получения дополнительной информации смотрите, Убыстряются и Развертывают MapReduce Используя Другие продукты.

outds = mapreduce(___,Name,Value) задает дополнительные опции с одним или несколькими Name,Value парные аргументы с помощью любого из предыдущих синтаксисов. Например, можно задать 'OutputFolder' сопровождаемый вектором символов, задающим путь к выходной папке.

Примеры

свернуть все

Используйте mapreduce считать количество рейсов сделанным каждой уникальной несущей авиакомпании в наборе данных.

Создайте datastore с помощью airlinesmall.csv набор данных. Этот набор данных на 12 мегабайтов содержит 29 столбцов информации о рейсе для нескольких несущих авиакомпании, включая прибытие и время отправления. В этом примере выберите UniqueCarrier (имя авиакомпании) как переменная интереса. Задайте 'TreatAsMissing' пара "имя-значение" так, чтобы datastore обработал 'NA' значения как пропавшие без вести, и задают 'MissingValue' пара "имя-значение", чтобы заменить отсутствующие значения на нули.

ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA',...
    'MissingValue',0);
ds.SelectedVariableNames = 'UniqueCarrier';
ds.SelectedFormats = '%C';

Предварительно просматривание данных.

preview(ds)
ans=8×1 table
    UniqueCarrier
    _____________

         PS      
         PS      
         PS      
         PS      
         PS      
         PS      
         PS      
         PS      

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

outds = mapreduce(ds, @countMapper, @countReducer);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  16% Reduce   0%
Map  32% Reduce   0%
Map  48% Reduce   0%
Map  65% Reduce   0%
Map  81% Reduce   0%
Map  97% Reduce   0%
Map 100% Reduce   0%
Map 100% Reduce  10%
Map 100% Reduce  21%
Map 100% Reduce  31%
Map 100% Reduce  41%
Map 100% Reduce  52%
Map 100% Reduce  62%
Map 100% Reduce  72%
Map 100% Reduce  83%
Map 100% Reduce  93%
Map 100% Reduce 100%
readall(outds)
ans=29×2 table
       Key          Value  
    __________    _________

    {'AA'    }    {[14930]}
    {'AS'    }    {[ 2910]}
    {'CO'    }    {[ 8138]}
    {'DL'    }    {[16578]}
    {'EA'    }    {[  920]}
    {'HP'    }    {[ 3660]}
    {'ML (1)'}    {[   69]}
    {'NW'    }    {[10349]}
    {'PA (1)'}    {[  318]}
    {'PI'    }    {[  871]}
    {'PS'    }    {[   83]}
    {'TW'    }    {[ 3805]}
    {'UA'    }    {[13286]}
    {'US'    }    {[13997]}
    {'WN'    }    {[15931]}
    {'AQ'    }    {[  154]}
      ⋮

Функция карты countMapper усиливает то, что данные являются категориальными. countcats и categories функции используются на каждом блоке входных данных, чтобы сгенерировать пары ключ/значение имени авиакомпании и сопоставленного количества.

function countMapper(data, info, intermKV)
% Counts unique airline carrier names in each block.
a = data.UniqueCarrier;
c = num2cell(countcats(a));
keys = categories(a);
addmulti(intermKV, keys, c)
end

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

function countReducer(key, intermValIter, outKV)
% Combines counts from all blocks to produce final counts.
count = 0;
while hasnext(intermValIter)
    data = getnext(intermValIter);
    count = count + data;
end
add(outKV, key, count)
end

Входные параметры

свернуть все

Введите datastore в виде объекта datastore. Используйте datastore функция, чтобы создать datastore возражает от вашего набора данных.

mapreduce работает только с хранилищами данных, которые детерминированы. Таким образом, если вы используете read на datastore, сброс datastore с reset, и затем считайте datastore снова, затем возвращенные данные должны быть тем же самым в обоих случаях. mapreduce вычисления, включающие datastore, который не детерминирован, могут привести к непредсказуемым результатам. Смотрите Выбирают Datastore for File Format или Application для получения дополнительной информации.

Указатель на функцию, чтобы сопоставить функцию. mapfun получает блоки из входного datastore ds, и затем использует add и addmulti функции, чтобы добавить пары "ключ-значение" в промежуточный KeyValueStore объект. Количество вызовов карты функционирует mapreduce равно количеству блоков в datastore (количество блоков определяется ReadSize свойство datastore).

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

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

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

Пример шаблона для функции карты

function myMapper(data, info, intermKVStore)
%do a calculation with the data block
add(intermKVStore, key, value)
end

Пример: @myMapper

Типы данных: function_handle

Указатель на функцию, чтобы уменьшать функцию. mapreduce вызовы reducefun однажды для каждого уникального ключа, добавленного к промежуточному KeyValueStore функцией карты. В каждом вызове, mapreduce передает значения, сопоставленные с активным ключом к reducefun как ValueIterator объект. reducefun функциональные циклы через значения для каждого ключа с помощью hasnext и getnext функции. Затем после выполнения некоторого вычисления (вычислений) это пишет пары "ключ-значение" в окончательный результат.

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

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

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

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

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

function myReducer(intermKey, intermValIter, outKVStore)
while hasnext(intermValIter)
    X = getnext(intermValIter);
    %do a calculation with the current value, X
end
add(outKVStore, key, value)
end

Пример: @myReducer

Типы данных: function_handle

Среда выполнения в виде объекта MapReducer. mr результат вызова mapreducer функция. mr по умолчанию аргумент является вызовом gcmr, который использует глобальную среду выполнения по умолчанию для mapreduce (в MATLAB значением по умолчанию является mapreducer(0), который возвращает SerialMapReducer объект.

Примечание

Эта установка задает среду выполнения для mapreduce и не необходимо, чтобы запустить mapreduce на вашем локальном компьютере. Для получения дополнительной информации смотрите, Убыстряются и Развертывают MapReduce Используя Другие продукты.

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: outds = mapreduce(ds, @mapfun, @reducefun, 'Display', 'off', 'OutputFolder', 'C:\Users\username\Desktop')

Тип datastore выводится в виде 'Binary' или 'TabularText'. Настройка по умолчанию 'Binary' возвращает KeyValueDatastore выведите datastore, который указывает на двоичный файл (.mat или .seq) файлы в выходной папке. 'TabularText' опция возвращает tabularTextDatastore выведите datastore, который указывает на .txt файлы в выходной папке.

Таблица предоставляет подробную информацию для каждого из выходных типов.

'OutputType'Тип datastore выводитсяDatastore указывает на файлы типаЗначения, которые может добавить Уменьшать функцияКлючи, которые может добавить Уменьшать функцияДетали
'Binary' (значение по умолчанию)KeyValueDatastore.mat (или .seq при выполнении против Hadoop®).Любой допустимый объект MATLAB.Векторы символов, строки или числовые скаляры, которые не являются NaN, комплексный, логический, или разреженный.N/A
'TabularText'TabularTextDatastore.txtВекторы символов, строки или числовые скаляры, которые не являются NaN, комплексный, логический, или разреженный.Векторы символов, строки или числовые скаляры, которые не являются NaN, комплексный, логический, или разреженный.
  • Файл является закодированным UTF-8.

  • Ключи и значения являются вкладкой (\t) разделенный.

  • Разделителем строки является \r\n на Windows®, и \n на Linux® и Mac.

Типы данных: char | string

Папка назначения для mapreduce выведите в виде пути к файлу. Выходная папка по умолчанию является текущей папкой, pwd. Можно задать различный путь с полностью определенным путем или с путем относительно текущей папки.

Пример: mapreduce(..., 'OutputFolder', 'MyOutputFolder\Results') задает путь к файлу относительно текущей папки для выхода.

Типы данных: char | string

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

Типы данных: char | string

Выходные аргументы

свернуть все

Выведите datastore, возвращенный как KeyValueDatastore или TabularTextDatastore объект. По умолчанию, outds KeyValueDatastore возразите что точки против .mat файлы в текущей папке. Используйте Name,Value парные аргументы для 'OutputType' и 'OutputFolder' возвратить tabularTextDatastore возразите или измените местоположение выходных файлов, соответственно.

mapreduce не сортирует пары "ключ-значение" в outds. Их порядок может не согласиться при использовании других продуктов с mapreduce.

Просмотреть содержимое outds, используйте previewчтение, или readall функции datastore.

Советы

  • Отладка ваш mapreduce алгоритмы, чтобы исследовать, как пары "ключ-значение" перемещаются через различные фазы, всегда полезны. Чтобы исследовать перемещение данных, установите точки останова в своих map и reduce функциях. Точки останова останавливают выполнение mapreduce, разрешение вам исследовать текущий статус следующих переменных, как KeyValueStore или ValueIterator. Для получения дополнительной информации см. Алгоритмы MapReduce Отладки.

  • Некоторые рекомендации оптимизировать mapreduce эффективность на любой платформе:

    • Минимизируйте количество вызовов функции карты. Самый легкий подход должен увеличить значение ReadSize свойство входного datastore. Результат - это mapreduce передает большие блоки данных функции карты, и datastore истощает с меньшим количеством чтений.

    • Уменьшите сумму промежуточных данных, отправленных между map и reduce функциями. Один подход должен использовать unique в карте функционируют, чтобы объединить подобные ключи. Смотрите Вычисляют, Подразумевают под Группой Используя MapReduce для примера этого метода.

Расширенные возможности

Введенный в R2014b