主要内容

利用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)

另请参阅

||||||

相关的话题

外部网站