exponenta event banner

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

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

DatabaseDatastore не поддерживает использование параллельного пула с установленным Toolbox™ Parallel Computing. Для анализа данных с помощью массивов tall или выполнения алгоритмов 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 с использованием функций Mapper и Reducer

Чтобы определить среднюю задержку прибытия в данных рейса, запустите 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

Считывание таблицы из хранилища выходных данных с помощью readall.

outtab = readall(outds)
outtab =

  1×2 table

           Key             Value  
    __________________    ________

    'MeanArrivalDelay'    [7.1201]

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

Просмотрите среднюю задержку поступления из таблицы.

meanArrDelay = outtab.Value{1}
meanArrDelay =

    7.1201

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

close(dbds)

См. также

| | | | | |

Связанные темы

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