Анализируйте большие данные в базе данных с помощью MapReduce

Этот пример определяет среднюю задержку прибытия большого набора данных о рейсе, который хранится в базе данных. Вы можете получить доступ к большим наборам данных с помощью databaseDatastore объект с Database Toolbox™. После создания DatabaseDatastore объект, можно написать алгоритм MapReduce, который задает куски и сокращение данных. Также можно использовать длинный массив, чтобы запустить алгоритмы на больших наборах данных.

The DatabaseDatastore объект не поддерживает использование параллельного пула с установленной Toolbox™ Parallel Computing. Чтобы анализировать данные с помощью длинных массивов или запустить алгоритмы MapReduce, установите глобальное окружение выполнения как локальный сеанс MATLAB ®.

Этот пример использует предварительно сконфигурированный источник данных JDBC для создания подключения к базе данных. Для получения дополнительной информации смотрите configureJDBCDataSource функция.

Создание DatabaseDatastore Объект

Установите глобальное окружение выполнения в качестве локального сеанса MATLAB ®.

mapreducer(0);

Файл airlinesmall.csv содержит большой набор полетных данных. Загрузите этот файл в таблицу базы данных Microsoft ® SQL Server ® airlinesmall. В этой таблице содержится 123 523 записи.

Создайте подключение базы данных к источнику данных JDBC MSSQLServerJDBCAuth. Этот источник данных настраивает драйвер JDBC для базы данных Microsoft ® SQL Server ® с проверкой подлинности Windows ®. Укажите пустые имя пользователя и пароль.

datasource = "MSSQLServerJDBCAuth";
username = "";
password = "";
conn = database(datasource,username,password);

Создайте DatabaseDatastore объект с использованием подключения к базе данных и SQL-запроса. Этот SQL-запрос извлекает данные задержки поступления из airlinesmall таблица.

sqlquery = 'select ArrDelay from airlinesmall';

dbds = databaseDatastore(conn,sqlquery);

Задайте функции Mapper и Reducer

Чтобы обработать большие наборы данных в фрагменты, можно записать собственную функцию mapper. Для каждого фрагмента в этом примере используйте meanArrivalDelayMapper.m кому:

  • Считайте данные о прибытии-задержке из DatabaseDatastore объект.

  • Определите количество задержек и общую задержку в фрагменте.

  • Сохраните оба значения в KeyValueDatastore.

The meanArrivalDelayMapper.m файл содержит этот код.

function meanArrivalDelayMapper (data, info, intermKVStore)
% Mapper function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% Data is an n-by-1 table of the ArrDelay. Remove missing value first:
data(isnan(data.ArrDelay),:) = [];

% Record the partial counts and sums and the reducer will accumulate them.
partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];
add(intermKVStore, 'PartialCountSumDelay',partCountSum);

Вы также можете написать свою собственную функцию редуктора. В этом примере используйте meanArrivalDelayReducer.m считывание промежуточных значений количества задержек и общей задержки прибытия. Затем определите общую среднюю задержку прибытия. mapreduce вызывает эту функцию редуктора только один раз, потому что функция mapper добавляет всего одну клавишу к KeyValueStore. The meanArrivalDelayReducer.m файл содержит этот код.

function meanArrivalDelayReducer(intermKey, intermValIter, outKVStore)
% Reducer function for the MeanMapReduceExample.

% Copyright 2014 The MathWorks, Inc.

% intermKey is 'PartialCountSumDelay'
count = 0;
sum = 0;
while hasnext(intermValIter)
   countSum = getnext(intermValIter);
   count = count + countSum(1);
   sum = sum + countSum(2);
end

meanDelay = sum/count;

% The key-value pair added to outKVStore will become the output of mapreduce 
add(outKVStore,'MeanArrivalDelay',meanDelay);

Запуск MapReduce с использованием функций Mapper и Reducer

Чтобы определить среднюю задержку прибытия в данных о рейсе, запустите MapReduce с DatabaseDatastore объект, функция mapper и функция редуктора.

outds = mapreduce(dbds,@meanArrivalDelayMapper,@meanArrivalDelayReducer);
********************************
*      MAPREDUCE PROGRESS      *
********************************
Map   0% Reduce   0%
Map  15% Reduce   0%
Map  30% Reduce   0%
Map  46% Reduce   0%
Map  61% Reduce   0%
Map  76% Reduce   0%
Map  92% Reduce   0%
Map 100% Reduce   0%
Map 100% Reduce 100%

Отобразите вывод из MapReduce

Прочитайте таблицу из выхода datastore используя readall.

outtab = readall(outds)
outtab =

  1×2 table

           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

Таблица имеет только одну строку, содержащую одну пару "ключ-значение".

Отображение средней задержки прибытия из таблицы.

meanArrDelay = outtab.Value{1}
meanArrDelay =

    7.1201

Закройте DatabaseDatastore Подключение объекта и базы данных

close(dbds)

См. также

| | | | | |

Похожие темы

Внешние веб-сайты