在云端处理大数据
本示例展示了如何在云中访问大型数据集,并在云集群中使用MATLAB的大数据功能对其进行处理。
学习如何:
访问Amazon Cloud上公开可用的大型数据集。
找到并选择这个数据集的一个有趣的子集。
使用数据存储、高数组和并行计算工具箱在不到20分钟的时间内处理这个子集。
本例中的公共数据集是Wind Integration National Dataset Toolkit(或Wind Toolkit[1],[2],[3],[4])的一部分。有关更多信息,请参见风能集成国家数据集工具包.
需求
要运行此示例,必须在Amazon AWS中设置对集群的访问。在MATLAB中,您可以直接从MATLAB桌面创建Amazon AWS中的集群。在首页选项卡,在平行菜单中,选择创建和管理集群.在“集群配置文件管理器”中,单击创建云集群.您也可以使用MathWorks Cloud Center在Amazon AWS中创建和访问计算集群。有关更多信息,请参见开始使用云中心.
设置对远程数据的访问
本例中使用的数据集是技术经济WIND工具包。它包含2 TB (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
与您自己的亚马逊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
集群配置文件的属性。若要编辑集群配置文件的属性,请使用“集群配置文件管理器”中的平行>创建和管理集群.有关更多信息,请参见在Workers上设置环境变量.
找到大数据的子集
2 TB的数据集相当大。这个示例向您展示了如何找到要分析的数据集的子集。该示例主要关注马萨诸塞州的数据。
首先获取标识马萨诸塞州的计量站的id,并确定包含它们的计量信息的文件。每个站的元数据信息在一个名为three_tier_site_metadata.csv
.由于此数据很小并且适合内存,因此可以从MATLAB客户端使用readtable
.您可以使用readtable
函数可以直接访问S3 bucket中的开放数据,而不需要编写特殊代码。
tMetadata = readtable(“s3: / / nrel-pds-wtk / wtk-techno-economic / pywtk-data / three_tier_site_metadata.csv”,...“ReadVariableNames”,真的,“TextType”,“字符串”);
若要了解此数据集中列出了哪些州,请使用独特的
.
state = unique(tMetadata.state)
州=50×1字符串数组"亚拉巴马""亚利桑那""阿肯色""加利福尼亚""科罗拉多""康乃狄克州""特拉华州""哥伦比亚特区""佛罗里达""乔治亚""爱达荷""伊利诺伊""印第安纳""爱荷华""堪萨斯""肯塔基""路易斯安那""缅因""马里兰""马萨诸塞""密歇根""明尼苏达""密西西比""密苏里""蒙大拿""内布拉斯加州""内华达""新罕布什尔州""新泽西""新墨西哥""纽约""北卡罗来纳州""北达科他州""俄亥俄""俄克拉荷马""俄勒冈""宾夕法尼亚""罗得岛""南卡罗来纳""南达科他""田纳西""德克萨斯""Utah" "Vermont" "Virginia" "Washington" "West Virginia" "Wisconsin" "Wyoming"
找出位于马萨诸塞州的车站。
index = tMetadata。状态= =“麻省”;siteId = tMetadata{索引,“site_id”};
给定站点的数据包含在一个文件中,该文件遵循以下命名约定:s3: / / nrel-pds-wtk / wtk-techno-economic / pywtk-data / met_data /文件夹/ site_id.nc
,在那里文件夹
最近的整数是否小于或等于site_id / 500
.使用这个约定,为每个站组成一个文件位置。
文件夹= floor(siteId/500);fileLocations = compose(“s3: / / nrel-pds-wtk / wtk-techno-economic pywtk-data / met_data / % d / % d.nc”、文件夹、siteId);
处理大数据
您可以使用数据存储和tall数组来访问和处理不适合内存的数据。在执行大数据计算时,MATLAB根据需要访问远程数据的较小部分,因此您不需要一次下载整个数据集。使用高数组,MATLAB自动将数据分解为更小的块,以便在内存中进行处理。
如果你有并行计算工具箱,MATLAB可以并行处理许多块。并行化使您能够在具有本地工作人员的单个桌面上运行分析,或者扩展到集群以获得更多资源。当您使用与数据相同的云服务中的集群时,数据将保留在云中,您将受益于改进的数据传输时间。将数据保存在云端也更划算。这个例子在亚马逊AWS的c4.8x大型机器上使用18个工作人员在不到20分钟的时间内运行。
如果在集群中使用并行池,MATLAB将使用集群中的worker处理这些数据。在集群中创建并行池。在下面的代码中,请使用集群配置文件的名称。将脚本附加到池中,因为并行工作者需要访问其中的helper函数。
P = parpool(“myAWSCluster”);
启动并行池(parpool)使用'myAWSCluster'配置文件…与18个工人相连。
addAttachedFiles (p, mfilename (“fullpath”));
用马萨诸塞州各车站的计量数据创建一个数据存储。数据以NetCDF (Network Common data form)文件的形式存在,必须使用自定义读取函数来解释它们。在这个例子中,这个函数被命名为ncReader
并将NetCDF数据读入时间表。您可以在脚本的末尾查看它的内容。
dsMetrology = fileDatastore(fileLocations,“ReadFcn”@ncReader,“UniformRead”,真正的);
使用来自数据存储的计量数据创建一个高时间表。
ttMetrology =高(dsMetrology)
ttMetrology = M×6 tall schedule时间风速风向功率密度温度压力____________________ __________ ____________________ __________________ ________ 01- 01- 2007 00:00:00 5.905 189.35 3.3254 1.2374 269.74 97963 01- 01- 2007 00:05: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 3.6973 1.2375 269.83 9795801-Jan-2007 00:25:00 6.2133 185.71 3.8698 1.2376 270.03 97952 01-Jan-2007 00:30:00 6.3232 184.29 4.0812 1.2379 270.19 97955 01-Jan-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函数支持高数组,因此您可以使万博1manbetx用熟悉的语法在大数据集上执行各种计算。有关受支持函数的详细信息,请参见万博1manbetx万博1manbetx支持功能.
定义自定义读函数
技术经济WIND工具箱中的数据保存在NetCDF文件中。定义一个自定义读取函数,将其数据读入时间表。有关读取NetCDF文件的详细信息,请参见NetCDF文件.
函数t = ncReader(文件名)% NCREADER读取NetCDF文件(.nc),提取数据集并保存为时间表获取有关NetCDF数据源的信息fileInfo = ncinfo(文件名);提取变量名和数据类型varNames =字符串({fileInfo.Variables.Name});varTypes = string({fileInfo.Variables.Datatype});将变量名转换为表变量的有效名称如果任何(startsWith (varNames, (“4”,“6”) strVarNames = replace(varNames,[“4”,“6”]、[“四”,“6”]);其他的strVarNames = varNames;结束提取每个变量的长度fileLength = fileInfo.Dimensions.Length;提取初始时间戳、采样周期并创建时间轴tAttributes = struct2table(fileInfo.Attributes);startTime = datetime(cell2mat(tAttributes.Value(contains(tAttributes.Name,“start_time”))),“ConvertFrom”,“epochtime”);samplePeriod = seconds(cell2mat(tAttributes.Value(contains(tAttributes.Name,“sample_period”))));创建输出时间表numVars = nummel (strVarNames);tableSize = [fileLength numVars];时间表(“大小”tableSize,“VariableTypes”varTypes,“VariableNames”strVarNames,“步伐”samplePeriod,“开始时间”、开始时间);用可变数据填写时间表为k = 1:numVars t(:,k) = table(ncread(文件名,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。
金,J. A.克利夫顿和B. M.霍奇。对WIND工具箱的功率输出进行验证技术报告,NREL/TP-5D00-61714)。戈尔登,CO:国家可再生能源实验室,2014。
[4] W.利伯曼-克里宾,C.德拉克斯和A.克利夫顿。使用windtoolkit验证代码指南(技术报告,NREL/TP-5000-62595)。戈尔登,CO:国家可再生能源实验室,2014。
另请参阅
相关的例子
更多关于
- 将深度学习数据上传到云端(深度学习工具箱)
- 大数据深度学习(深度学习工具箱)