此示例显示如何访问云中的大数据并使用Matlab功能进行大数据的Matlab功能在云群中进行处理。
学习如何:
访问Amazon Cloud上公开可用的大数据集。
找到并选择此数据集中感兴趣的子集。
使用数据存储、高数组和并行计算工具箱在不到20分钟的时间内处理这个子集。
此示例中的公共数据集是Wind Integration National数据集工具包的一部分,或Wind Toolkit [1],[2],[3],[4]。有关更多信息,请参阅风集成国家数据集工具包.
要运行这个示例,您必须在Amazon AWS中设置对集群的访问。在MATLAB中,您可以直接从MATLAB桌面在Amazon AWS中创建集群。在首页标签,在平行菜单中,选择创建和管理集群.在集群配置文件管理器中,单击创建云计算集群.或者,您可以使用MathWorks云中心在Amazon AWS中创建和访问Compute Clusters。有关更多信息,请参阅云中心入门.
在此示例中使用的数据集是技术经济风格工具包。它包含2 TB(TberByte)用于风电估算和预测,以及大陆美国2007年至2013年的大气变量。
该技术经济风工具包可通过亚马逊网络服务在当地获得s3: / / pywtk-data。它包含两个数据集:
s3: / / pywtk-data / met_data计量数据
S3:// pywtk-data / fcst_data- 预测数据
要使用Amazon S3中的远程数据,必须为AWS凭据定义环境变量。有关设置远程数据访问的详细信息,请参见使用远程数据.在下面的代码中,替换YOUR_AWS_ACCESS_KEY_ID
和YOUR_AWS_SECRET_ACCESS_KEY
使用您自己的Amazon AWS凭据。
setenv (“AWS_ACCESS_KEY_ID”,“your_aws_access_key_id”);setenv (“AWS_SECRET_ACCESS_KEY”,“YOUR_AWS_SECRET_ACCESS_KEY”);
此数据集需要指定其地理区域,因此必须设置相应的环境变量。
setenv (“AWS_DEFAULT_REGION”,“美国 - 西2”);
要使集群中的工作者能够访问远程数据,请将这些环境变量名添加到EnvironmentVariables
属性。要编辑集群配置文件的属性,请使用集群配置文件管理器平行>创建和管理集群.
2tb的数据集相当大。这个例子向您展示了如何找到您想要分析的数据集的子集。该示例主要关注马萨诸塞州的数据。
首先获取标识马萨诸塞州气象站的id,并确定包含其计量信息的文件。每个站点的元数据信息都在一个名为three_tier_site_metadata.csv
.因为此数据很小并且适合内存,所以您可以从MATLAB客户端访问它readtable
.你可以使用readtable
函数直接访问S3存储桶中的开放数据,而不需要编写特殊代码。
tMetadata = readtable (“s3: / / pywtk-data / three_tier_site_metadata.csv”,...“ReadVariableNames”,真的,“TextType”,“字符串”);
要找出该数据集中列出了哪些状态,请使用独特的
.
州=独特(tMetadata.state)
州=50×1字符串数组""阿拉巴马""亚利桑那""阿肯色""加利福尼亚""科罗拉多""康涅狄格""特拉华""哥伦比亚区""佛罗里达""乔治亚""爱达荷""伊利诺伊""印第安纳""爱荷华""堪萨斯""肯塔基""路易斯安纳""缅因""马里兰""马萨诸塞""密歇根""明尼苏达""密西西比""密苏里""蒙大拿""内布拉斯加""内华达""新罕布什尔""新泽西""新墨西哥"“纽约”,“北卡罗莱纳州”,“北达科他州”,“俄亥俄”,“俄克拉何马州”,“俄勒冈”,“宾夕法尼亚”,“罗德岛”,“南卡罗来纳”,“南达科他”,“田纳西”,“得克萨斯”,“犹他”,“佛蒙特州”,“弗吉尼亚”,“华盛顿”,“西弗吉尼亚”,“威斯康辛”,“怀俄明州”
确定哪些站点位于马萨诸塞州。
指数= tMetadata。状态= =“麻省”;siteId = tMetadata{指数,“site_id”};
给定站点的数据包含在一个文件中,该文件遵循以下命名约定:s3://pywtk-data/met_data/folder/site_id.nc.
,在那里文件夹
最近的整数是小于等于吗site_id / 500
.使用此约定,为每个站撰写文件位置。
文件夹=地板(siteId / 500);fileLocations =组成(“s3: / / pywtk-data / met_data / % d / % d.nc”、文件夹、siteId);
您可以使用数据存储和高阵列来访问和处理不适合内存的数据。执行大数据计算时,MATLAB根据需要访问较小的远程数据部分,因此您无需立即下载整个数据集。对于高阵列,MATLAB会自动将数据打入更符合内存以进行处理的较小块。
如果你有并行计算工具箱,MATLAB可以并行处理许多块。这种并行性使您能够使用本地工作人员在单个桌面上运行分析,或者扩展到集群以获得更多的资源。当您在与数据相同的云服务中使用集群时,数据将留在云中,您将受益于改进的数据传输时间。将数据保存在云端也更划算。这个示例在Amazon AWS的c4.8xlarge机器上使用18个工人运行了不到20分钟。
如果在集群中使用并行池,MATLAB将使用集群中的worker来处理这些数据。在集群中创建并行池。在下面的代码中,使用集群配置文件的名称。将脚本附加到池中,因为并行工作程序需要访问其中的助手函数。
p = parpool (“myawscluster”);
使用'myAWSCluster'配置文件启动并行池(parpool)…与18名工人联系。
addAttachedFiles (p, mfilename (“fullpath”));
用马萨诸塞州的气象站的计量数据创建一个数据存储。数据是网络公共数据表单(NetCDF)文件的形式,您必须使用自定义的读取函数来解释它们。在这个例子中,这个函数被命名为ncreader.
并将NetCDF数据读入时间表。您可以在此脚本末尾探索其内容。
dsMetrology = fileDatastore (fileLocations,“ReadFcn”@ncReader,“统一read”,真正的);
使用数据存储中的度量数据创建一个长时间表。
ttMetrology =高(dsMetrology)
ttMetrology =米×6时间表时间wind_speed wind_direction功率密度温度压力 ____________________ __________ ______________ ______ _______ ___________ ________ 01 - 1月- 2007就是5.905 189.35 3.3254 1.2374 269.74 97963 01 - 1月- 2007年00:05:00 5.8898 188.77 3.2988 1.2376 269.73 97959年01 - 1月- 2007 00:10:00 5.9447 187.85 3.3961.2376 - 269.71 97960 01 - 1月- 2007 00:15:00 6.0362 187.05 3.5574 1.2376 269.68 97961 01 - 1月- 2007年00:20:00 6.1156 186.49 3.6973 1.2375 269.83 97958年01 - 1月- 2007 00:25:00 6.2133 185.71 3.8698 1.2376 270.03 97952 01 - 1月- 2007年00:30:00 6.3232 184.29 4.0812 1.2379 270.19 97955年01 - 1月- 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([260 300]);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函数支持高阵列,因此您可以使金宝app用熟悉的语法对大数据集进行各种计算。有关支持功能的更多信息,请参阅金宝app金宝app支持功能.
技术经济风格工具包中的数据保存在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,[varNames])“4”,“6”]、[“四”,“6”]);其他的strVarNames = varNames;结束%提取每个变量的长度fileLength = fileInfo.Dimensions.Length;提取初始时间戳、采样周期并创建时间轴tAttributes = struct2table (fileInfo.Attributes);开始时间= datetime (cell2mat (tAttributes.Value(包含(tAttributes.Name,“开始时间”))),“ConvertFrom”,“epochtime”);sampleperiod =秒(cell2mat(taltritributes.value(包含(tattributes.name,“sample_period”))))));%创建输出时间表numVars =元素个数(strVarNames);tableSize = [fileLength numVars];t =时间表(“大小”tableSize,'variabletypes'varTypes,“VariableNames”strVarNames,'timestep'samplePeriod,“开始时间”、开始时间);%用变量数据填写时间表为t(:,k) = table(ncread(filename,varNames{k}));结束结束
[1] Draxl, C., B. M. Hodge, A. Clifton, J. McCaa。Wind Integration National DataSet Toolkit的概述和气象验证(技术报告,NREL / tp - 5000 - 61740)。国家可再生能源实验室,2015年。
[2] Draxl, C., B. M. Hodge, A. Clifton, J. McCaa。“风能集成国家数据集(Wind)工具包。”应用能源.卷。151,2015,pp。355-366。
[3]国王,J.,A.Clifton和B. M. Hodge。验证风力工具包的电源输出(技术报告,NRER / TP-500-61714)。Golden,Co:全国可再生能源实验室,2014年。
Lieberman-Cribbin, W., C. Draxl, and A. Clifton。使用WIND工具包验证代码指南(技术报告,NRER / TP-5000-62595)。Golden,Co:全国可再生能源实验室,2014年。