主要内容

在云端处理大数据

本示例展示了如何在云中访问大型数据集,并在云集群中使用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。

另请参阅

|||

相关的例子

更多关于