Этот пример определяет среднюю задержку прибытия большого набора данных полета, который хранится в базе данных. Доступ к большим наборам данных можно получить с помощью с Toolbox™ базы данных. После создания databaseDatastoreDatabaseDatastore можно написать алгоритм 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 с помощью 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%
Считывание таблицы из хранилища выходных данных с помощью 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