主要内容

云端处理大数据

这个例子展示了如何在云中访问一个大数据集,并使用MATLAB的大数据功能在云集群中处理它。

学习如何:

  • 访问Amazon Cloud上公开可用的大数据集。

  • 找到并选择这个数据集的一个有趣的子集。

  • 使用数据存储、高数组和并行计算工具箱可以在不到20分钟的时间内处理这个子集。

本例中的公共数据集是Wind集成国家数据集工具包(Wind工具包[1]、[2]、[3]、[4])的一部分。有关更多信息,请参见风整合国家数据集工具包

需求

要运行此示例,必须在Amazon AWS中设置对集群的访问。在MATLAB中,您可以直接从MATLAB桌面在Amazon AWS中创建集群。在首页选项卡,平行菜单中,选择创建和管理集群.在“集群配置文件管理器”中,单击创建云计算集群.您也可以使用MathWorks Cloud Center在Amazon AWS中创建和访问计算集群。有关更多信息,请参见云中心入门

设置远程数据访问

本例中使用的数据集是技术-经济WIND工具包。它包含了2tb (TB)的数据,用于估算和预测2007年至2013年美国大陆的大气变量

技术经济WIND工具包可通过亚马逊网络服务获得s3: / / nrel-pds-wtk / wtk-techno-economic / pywtk-data。它包含两个数据集:

  • s3: / / nrel-pds-wtk wtk-techno-economic / pywtk-data / met_data计量数据

  • s3: / / nrel-pds-wtk wtk-techno-economic / pywtk-data / fcst_data——预测数据

要使用Amazon S3中的远程数据,必须为AWS凭证定义环境变量。有关设置远程数据访问的详细信息,请参见使用远程数据.在以下代码中,替换YOUR_AWS_ACCESS_KEY_ID而且YOUR_AWS_SECRET_ACCESS_KEY使用您自己的Amazon AWS证书。如果使用临时AWS安全凭据,还需要设置环境变量AWS_SESSION_TOKEN

setenv (“AWS_ACCESS_KEY_ID”“YOUR_AWS_ACCESS_KEY_ID”);setenv (“AWS_SECRET_ACCESS_KEY”“YOUR_AWS_SECRET_ACCESS_KEY”);

该数据集要求指定其地理区域,因此必须设置相应的环境变量。

setenv (“AWS_DEFAULT_REGION”“us-west-2”);

要使集群中的工作人员能够访问远程数据,请将这些环境变量名添加到EnvironmentVariables属性。要编辑集群配置文件的属性,请使用中的“集群配置文件管理器”平行>创建和管理集群.有关更多信息,请参见在worker上设置环境变量

找到大数据的子集

2tb的数据集相当大。此示例向您展示如何找到要分析的数据集的子集。该示例主要关注马萨诸塞州的数据。

首先获取标识马萨诸塞州计量站的id,并确定包含它们的计量信息的文件。每个站点的元数据信息都在一个名为three_tier_site_metadata.csv.因为这个数据很小并且适合内存,所以您可以从MATLAB客户端访问它readtable.您可以使用readtable函数直接访问S3桶中的开放数据,而不需要编写特殊的代码。

tMetadata = readtable (“s3: / / nrel-pds-wtk / wtk-techno-economic / pywtk-data / three_tier_site_metadata.csv”...“ReadVariableNames”,真的,“TextType”“字符串”);

要找出该数据集中列出了哪些状态,请使用独特的

州=独特(tMetadata.state)
州=50×1的字符串数组“阿拉巴马”“亚利桑那”“阿肯色州”“科罗拉多”“康涅狄格”“特拉华”“哥伦比亚特区”“佛罗里达”“乔治亚”“爱达荷”“伊利诺斯”“印第安纳”“爱荷华”“堪萨斯州”“肯塔基”“路易斯安那”“缅因州”“马里兰州”“马萨诸塞州”“明尼苏达州”“蒙大拿”“内布拉斯加州”“内华达”“新罕布什尔州”“新泽西”“新墨西哥”“纽约”“北卡罗来纳州”“北达科他州”“俄亥俄”“俄克拉荷马州”“俄勒冈州”“宾夕法尼亚”“罗德岛”“南卡罗来纳州”“南达科他州”“田纳西州”“德克萨斯州”"Utah" "Vermont" "Virginia" "Washington" "West Virginia" "Wisconsin" "Wyoming"

确定哪些站点位于马萨诸塞州。

指数= tMetadata。状态= =“麻省”;siteId = tMetadata{指数,“site_id”};

给定站点的数据包含在一个遵循以下命名约定的文件中:s3: / / nrel-pds-wtk / wtk-techno-economic / pywtk-data / met_data /文件夹/ site_id.nc,在那里文件夹最近的整数是否小于或等于site_id / 500.使用这个约定,为每个工作站组成一个文件位置。

文件夹=地板(siteId / 500);fileLocations =组成(“s3: / / nrel-pds-wtk / wtk-techno-economic pywtk-data / met_data / % d / % d.nc”、文件夹、siteId);

处理大数据

您可以使用数据存储和高数组来访问和处理内存中不适合的数据。在执行大数据计算时,MATLAB根据需要访问远程数据的较小部分,因此您不需要一次下载整个数据集。使用高数组,MATLAB自动将数据分解为更小的块,以便在内存中进行处理。

如果你有并行计算工具箱,MATLAB可以并行处理许多块。并行化使您能够使用本地工作人员在单个桌面上运行分析,或者扩展到集群以获得更多资源。当您在与数据相同的云服务中使用集群时,数据将保留在云中,您将受益于改进的数据传输时间。将数据保存在云端也更具成本效益。这个例子在Amazon AWS的c4.8xlarge机器上使用了18个工作人员,运行时间不到20分钟。

如果在集群中使用并行池,MATLAB会使用集群中的工作者处理这些数据。在集群中创建一个并行池。在下面的代码中,请使用集群概要文件的名称。将脚本附加到池中,因为并行工作者需要访问其中的助手函数。

p = parpool (“myAWSCluster”);
使用“myAWSCluster”配置文件启动并行池(parpool)…与18名工人相连。
addAttachedFiles (p, mfilename (“fullpath”));

为马萨诸塞州的气象站创建一个计量数据存储。数据采用NetCDF (Network Common data form)文件的形式,必须使用自定义读函数来解释它们。在本例中,这个函数被命名为ncReader并将NetCDF数据读入时间表。您可以在这个脚本的末尾探索它的内容。

dsMetrology = fileDatastore (fileLocations,“ReadFcn”@ncReader,“UniformRead”,真正的);

用数据存储中的计量数据创建一个高时间表。

ttMetrology =高(dsMetrology)
ttMetrology = M×6 tall时间表时间风速风向功率密度温度压力____________________ __________ ____________________ __________________ ________ 01- 01- 2007 00:00:00 5.905 189.35 3.3254 1.2374 269.74 97963 01- 01- 2007 00:05:00 5.8898 188.77 3.2988 1.2376 269.73 97959 01- 01- 2007 00:10:00 5.9447 187.85 3.396 1.2376 269.71 97960 01- 01- 2007 00:15:00 6.0362 187.05 3.5574 1.2376 269.68 97961 01- 01- 2007 00:20:00 6.1156 186.49 1.2373 1.2375 269.83 9795801- 01- 2007 00:30:00 6.3232 184.29 4.0812 1.2379 270.19 97955 01- 01- 2007 00:35:00 6.4331 182.51 4.3382 1.2382 270.3 97957::::::::::::::

用求每月平均温度groupsummary,并对生成的高表进行排序。为了性能考虑,MATLAB将大多数高操作推迟到需要数据的时候。在本例中,绘制数据触发延迟计算的计算。

meanTemperature = groupsummary (ttMetrology,“时间”“月”“的意思是”“温度”);meanTemperature = sortrows (meanTemperature);

策划的结果。

图;情节(meanTemperature.mean_temperature“* - - - - - -”);ylim(300年[260]);xlim ([1 12 * 7 + 1]);xticks (1:12:12 * 7 + 1);xticklabels ([“2007”“2008”“2009”“2010”“2011”“2012”“2013”“2014”]);标题(“马萨诸塞州2007-2013年平均气温”);包含(“年”);ylabel (“温度(K)”

许多MATLAB函数支持高数组,因此您可以使用熟悉的语法在大数据集上执行各种计算。有关支持的函数的更多信息,请参见支持功能

定义自定义读函数

技术经济WIND工具包中的数据保存在NetCDF文件中。定义一个自定义读函数,将其数据读入时间表。有关读取NetCDF文件的更多信息,请参见NetCDF文件

函数t = ncReader(文件名)% NCREADER读取NetCDF文件(.nc),提取数据集并保存为时间表获取关于NetCDF数据源的信息fileInfo = ncinfo(文件名);提取变量名和数据类型varNames =字符串({fileInfo.Variables.Name});varTypes =字符串({fileInfo.Variables.Datatype});将变量名转换为表变量的有效名称如果任何(startsWith (varNames, (“4”“6”strVarNames = replace(varNames,[)“4”“6”]、[“四”“6”]);其他的strVarNames = varNames;结束提取每个变量的长度fileLength = fileInfo.Dimensions.Length;提取初始时间戳,采样周期,并创建时间轴tAttributes = struct2table (fileInfo.Attributes);开始时间= datetime (cell2mat (tAttributes.Value(包含(tAttributes.Name,“start_time”))),“ConvertFrom”“epochtime”);samplePeriod =秒(cell2mat (tAttributes.Value(包含(tAttributes.Name,“sample_period”))));创建输出时间表numVars =元素个数(strVarNames);tableSize = [fileLength numVars];t =时间表(“大小”tableSize,“VariableTypes”varTypes,“VariableNames”strVarNames,“步伐”samplePeriod,“开始时间”、开始时间);用可变数据填写时间表。k = 1:numVars t(:,k) =表(ncread(filename,varNames{k}));结束结束

参考文献

德拉克斯,C., B. M.霍奇,A.克里夫顿,J.麦卡。风力综合国家数据集工具包的概述和气象验证(技术报告,NREL / tp - 5000 - 61740)。戈尔登,CO:国家可再生能源实验室,2015。

德拉克斯,C., B. M.霍奇,A.克里夫顿,J.麦卡。“风力综合国家数据集(Wind)工具包。”应用能源.Vol. 151, 2015, pp. 355-366。

[3]金,J. A.克利夫顿,B. M.霍奇。验证WIND工具包的功率输出(技术报告,NREL / tp - 5 - d00 - 61714)。戈登,CO:国家可再生能源实验室,2014。

[4]利伯曼-克里宾,W., C.德拉克斯,A.克利夫顿。WIND工具包验证代码使用指南(技术报告,NREL / tp - 5000 - 62595)。戈登,CO:国家可再生能源实验室,2014。

另请参阅

|||

相关的例子

更多关于

Baidu
map