Этот пример определяет среднюю задержку прибытия большого набора данных о рейсе, который хранится в базе данных. Вы можете получить доступ к большим наборам данных с помощью
объект с Database Toolbox™. После создания databaseDatastore
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. Для каждого фрагмента в этом примере используйте 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 с 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%
Прочитайте таблицу из выхода datastore используя readall
.
outtab = readall(outds)
outtab = 1×2 table Key Value __________________ ________ 'MeanArrivalDelay' [7.1201]
Таблица имеет только одну строку, содержащую одну пару "ключ-значение".
Отображение средней задержки прибытия из таблицы.
meanArrDelay = outtab.Value{1}
meanArrDelay = 7.1201
DatabaseDatastore
Подключение объекта и базы данныхclose(dbds)
close
| database
| databaseDatastore
| mapreduce
| readall
| setdbprefs
| TabularTextDatastore