利用MapReduce分析数据库中的大数据
此示例确定存储在数据库中的大量航班数据的平均到达延迟。方法可以访问大型数据集
对象与数据库工具箱™。创建一个databaseDatastore
DatabaseDatastore
对象,你可以写一个MapReduce算法来定义数据的分块和缩减。或者,您可以使用一个高数组在大型数据集上运行算法。
的DatabaseDatastore
对象不支持使用安装了并行计算工具金宝app箱™的并行池。要使用高数组或运行MapReduce算法分析数据,请将全局执行环境设置为本地MATLAB®会话。
本示例使用预配置的JDBC数据源创建数据库连接。有关更多信息,请参见
函数。configureJDBCDataSource
创建DatabaseDatastore
对象
设置全局执行环境为本地MATLAB®会话。
mapreduce (0);
该文件airlinesmall.csv
包含大量的飞行数据。将此文件加载到Microsoft®SQL Server®数据库表中airlinesmall
.该表包含123,523条记录。
创建到JDBC数据源的数据库连接MSSQLServerJDBCAuth
.该数据源配置JDBC驱动程序到具有Windows®身份验证的Microsoft®SQL Server®数据库。请指定空白的用户名和密码。
数据源=“MSSQLServerJDBCAuth”;用户名="";密码="";Conn =数据库(数据源,用户名,密码);
创建一个DatabaseDatastore
对象使用数据库连接和SQL查询。的到达延迟数据airlinesmall
表格
sqlquery ='select ArrDelay from airlinsmall ';dbds = databaseDatastore(conn,sqlquery);
定义Mapper和Reducer函数
要处理大块的大型数据集,您可以编写自己的mapper函数。对于本例中的每个块,使用meanArrivalDelayMapper.m
:
从中读取到达延迟数据
DatabaseDatastore
对象。确定延迟的数量和块中的总延迟。
将两个值存储在
KeyValueDatastore
.
的meanArrivalDelayMapper.m
文件包含此代码。
函数meanArrivalDelayMapper (data, info, intermKVStore)% Mapper函数用于MeanMapReduceExample。版权所有2014 The MathWorks, Inc.% Data是一个n × 1的ArrDelay表。首先删除缺失的值:data(isnan(data. arrdelay),:) = [];记录部分计数和和,减速器将累积它们。。partCountSum = [length(data.ArrDelay), sum(data.ArrDelay)];添加(intermKVStore“PartialCountSumDelay”, partCountSum);
您也可以编写自己的减速器函数。在本例中,使用meanArrivalDelayReducer.m
读取延迟数和总到达延迟的中间值。然后,确定总体平均到达延迟。mapreduce
这个reducer函数只调用一次,因为mapper函数只添加一个键KeyValueStore
.的meanArrivalDelayReducer.m
文件包含此代码。
函数meanArrivalDelayReducer(intermKey, intermValIter, outKVStore)MeanMapReduceExample的% Reducer函数。版权所有2014 The MathWorks, Inc.% intermKey为'PartialCountSumDelay'Count = 0;Sum = 0;而hasnext(intermValIter) countSum = getnext(intermValIter);count = count + count (1);sum = sum + countSum(2);结束meanddelay = sum/count;添加到outKVStore的键值对将成为mapreduce的输出添加(outKVStore“MeanArrivalDelay”, meanDelay);
使用Mapper和Reducer功能运行MapReduce
要确定航班数据中的平均到达延误时间,运行MapReduce和DatabaseDatastore
对象,mapper函数和reducer函数。
outds = mapreduce(dbds,@meanArrivalDelayMapper,@meanArrivalDelayReducer);
******************************** * MAPREDUCE的进展 * ******************************** 地图地图15%减少0% 30% 0%减少0%减少0%地图46%减少0% 61%减少0%地图76%减少0% 92%减少0%地图100%减少0% 100%减少100%
显示MapReduce的输出
从输出数据存储中读取表readall
.
Outtab = readall(outds)
outtab = 1×2表键值 __________________ ________ ' MeanArrivalDelay ' [7.1201]
表中只有一行包含一个键值对。
从表格中显示平均到达延迟。
meanArrDelay = outtab。值{1}
meanArrDelay = 7.1201
关闭DatabaseDatastore
对象和数据库连接
关上(dbd)
另请参阅
setdbprefs
|数据库
|databaseDatastore
|readall
|关闭
|mapreduce
|TabularTextDatastore