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

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

DatabaseDatastore объект не поддерживает использование параллельного пула с установленным Parallel Computing Toolbox™. Чтобы анализировать данные с помощью длинных массивов или алгоритмов 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);

Задайте функции картопостроителя и редуктора

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

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

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

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

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 вызывает эту функцию редуктора только однажды, потому что функция картопостроителя добавляет всего один ключ в KeyValueStore. 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 Используя функции картопостроителя и редуктора

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

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)

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

| | | | | |

Похожие темы

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