主要内容

matlab.io.datastore.Partitionable类

包:matlab.io.datastore

为数据存储添加并行支持万博1manbetx

描述

matlab.io.datastore.Partitionable是一个抽象的mixin类,它将并行支持添加到您的自定义数据存储,用于并行计算工具箱™和万博1manbetxMATLAB®并行服务器™

要使用这个mixin类,您必须继承matlab.io.datastore.Partitionable类,除了从matlab.io.Datastore基类。在类定义文件的第一行输入以下语法:

classdef MyDatastore < matlab.io.Datastore &…matlab.io.datastore.Partitionable……结束

要向自定义数据万博1manbetx存储添加并行处理支持,您必须:

有关创建具有并行处理支持的自定义数据存储的详细信息和步骤,请参见万博1manbetx开发自定义数据存储

方法

maxpartitions 可能的最大分区数
numpartitions 默认分区数
分区 分区数据存储

属性

密封

有关类属性的信息,请参见类属性

例子

全部折叠

构建一个具有并行处理支持的数据存储,并使用它将您的自定义或专有数据带入MATLAB®。万博1manbetx然后,在一个并行池中处理数据。

创建一个.m类定义文件,该文件包含实现自定义数据存储的代码。您必须将此文件保存在您的工作文件夹或MATLAB®路径上的文件夹中。公司的名称.m文件必须与对象构造函数的名称相同。例如,如果您希望构造函数的名称为MyDatastorePar,那么.m文件必须MyDatastorePar.m.的.m类定义文件必须包含以下步骤:

  • 步骤1:从数据存储类继承。

  • 步骤2:定义构造函数和所需的方法。

  • 步骤3:定义自定义的文件读取功能。

除了这些步骤之外,还定义处理和分析数据所需的任何其他属性或方法。

步骤1:从数据存储类继承classdefMyDatastorePar < matlab.io.Datastore &...matlab.io.datastore.Partitionable属性(Access = private) CurrentFileIndex文件集matlab.io.datastore.DsFileSet结束属性支持保存、加载和处理万博1manbetx%数据存储在不同的文件系统机器或集群上。另外,定义get.AlternateFileSystemRoots()方法%和set.AlternateFileSystemRoots()在方法部分。属性(依赖)AlternateFileSystemRoots结束步骤2:定义构造函数和所需的方法方法定义数据存储构造函数函数myds = MyDatastorePar(location,altRoots)文件集= matlab.io.datastore.DsFileSet(location,...“FileExtensions”“。斌”...“FileSplitSize”8 * 1024);myds。CurrentFileIndex = 1;如果Nargin == 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束定义hasdata方法函数tf = hasdata (myds)%如果有更多可用数据则返回truetf = hasfile (myds.FileSet);结束%定义读取方法函数(数据、信息)=阅读(myds)读取数据和提取数据的相关信息%参见:MyFileReader()如果~hasdata(myds) msgII = ['使用reset方法重置数据存储'...从数据开始];msgIII = [在调用read方法之前...'检查数据是否可用来读取'...'通过使用hasdata方法。'];错误('没有更多数据要读取。\n%s\n%s'、msgII msgIII);结束fileInfoTbl = nextfile (myds.FileSet);data = MyFileReader (fileInfoTbl);信息。大小=大小(数据);信息。文件名= fileInfoTbl.FileName;信息。抵消= fileInfoTbl.Offset;%更新CurrentFileIndex以跟踪进度如果fileInfoTbl。抵消+ fileInfoTbl。SplitSize > =...fileInfoTbl。文件大小myds。CurrentFileIndex = myds。CurrentFileIndex + 1;结束结束定义重置方法函数重置(myds)%重置到数据的开始重置(myds.FileSet);myds。CurrentFileIndex = 1;结束%定义分区方法函数Subds = partition(myds,n,ii); / /分区再分。文件集=分区(myds.FileSet n ii);重置(再分);结束% AlternateFileSystemRoots属性的Getter函数altRoots = get. fileset . alternatefilesystemroots (myds);结束% Setter for AlternateFileSystemRoots属性函数set.AlternateFileSystemRoots (myds altRoots)试一试% DsFileSet对象管理AlternateFileSystemRoots%用于您的数据存储myds.FileSet.AlternateFileSystemRoots = altRoots;%重置数据存储重置(myds);我把(我);结束结束结束方法(隐藏= true)定义进度方法函数压裂=进步(myds)%确定从数据存储读取数据的百分比如果hasdata(myds) frac = (myds. currentfileindex -1)/...myds.FileSet.NumFiles;其他的压裂= 1;结束结束结束方法(访问=保护)%如果您在数据存储中使用FileSet属性,%则必须定义copelement方法。的% copelement方法允许像readall这样的方法%和预览保持无状态函数dscopy = copelement (ds);dscopy。文件集= (ds.FileSet)复印件;结束定义maxpartitions方法函数n = maxpartitions(myds. fileset);结束结束结束步骤3:实现您的自定义文件读取功能函数data = MyFileReader (fileInfoTbl)%使用FileName创建一个读取器对象读者= matlab.io.datastore.DsFileReader (fileInfoTbl.FileName);寻找偏移量寻求(读者,fileInfoTbl。抵消,“起源”“start-of-file”);% fileInfoTbl阅读。SplitSize数据量data =阅读(读者,fileInfoTbl.SplitSize);结束

您的自定义数据存储现在已经准备好了。使用自定义数据存储在并行池中读取和处理数据。

使用自定义数据存储预览和读取您的专有数据到MATLAB并行处理。

这个示例使用一个简单的数据集来演示使用自定义数据存储的工作流。数据集是15个二进制(。斌)文件,其中每个文件包含列(1变量)和10000无符号整数的行(记录)。

dir (“*。斌”
Binary_data01.bin binary_data05.bin binary_data09.bin binary_data13.bin binary_data02.bin binary_data06.bin binary_data10.bin binary_data14.bin binary_data03.bin binary_data07.bin binary_data11.bin binary_data15.bin binary_data04.bin binary_data08.bin binary_data12.bin

属性创建数据存储对象MyDatastorePar函数。有关MyDatastorePar,请参阅示例使用并行处理支持构建数据存储万博1manbetx

文件夹= fullfile (“*。斌”);ds = MyDatastorePar(文件夹);

预览数据存储中的数据。

预览(ds)
ans =8x1 uint8列向量113 180 251 91 29 66 254 214

确定数据存储的分区数。如果您有并行计算工具箱(PCT),那么您可以使用n = numpartitions (ds, myPool),在那里myPoolgcpparpool

n = numpartitions (ds);

将数据存储分区为n部件和n并行池中的工作人员。

parforIi = 1:n subds = partition(ds,n, Ii);Hasdata (subds) data = read(subds);%做某事结束结束

要使用涉及不同平台云或集群机器的并行和分布式计算来处理数据存储,必须预先定义“AlternateFileSystemRoots”参数。例如,在本地机器上创建一个数据存储,并分析一小部分数据。然后,使用并行计算工具箱将您的分析扩展到整个数据集MATLAB并行服务器

使用MyDatastorePar赋值给“AlternateFileSystemRoots”财产。有关MyDatastorePar,请参阅示例使用并行处理支持构建数据存储万博1manbetx

的值“AlternateFileSystemRoots”属性,标识不同平台上数据的根路径。根路径因计算机或文件系统的不同而不同。例如,如果您使用以下根路径访问数据:

  • “Z: \数据集”从窗户®机器。

  • “nfs-bldg001 /数据集”MATLAB并行服务器Linux®集群。

然后,使用AlternateFileSystemRoots财产。

altRoots = [“Z: \数据集”“nfs-bldg001 /数据集”];ds = MyDatastorePar (Z: \数据集的, altRoots);

分析本地机器上的一小部分数据。例如,获取数据的一个分区子集,并通过删除任何遗漏的条目来清理数据。然后,检查变量的图。

tt =高(分区(ds 100 1));总结(tt);%分析你的数据tt = rmmissing (tt);情节(tt.MyVar1 tt.MyVar2)

通过使用扩展分析到整个数据集MATLAB并行服务器集群(Linux集群)。例如,使用集群概要文件启动工作池,然后使用并行和分布式计算功能对整个数据集执行分析。

parpool (“MyMjsProfile”) tt = tall(ds);总结(tt);%分析你的数据tt = rmmissing (tt);情节(tt.MyVar1 tt.MyVar2)

提示

  • 对于您的自定义数据存储实现,最佳实践是不实现numpartitions方法。

介绍了R2017b