本主题显示如何实现基于文件的数据的自定义数据存储。仅在编写自己的自定义数据存储界面时才使用此框架。否则,对于标准文件格式,例如图像或电子表格,请使用MATLAB的现有数据存储®.有关更多信息,请参见开始使用数据存储.
要构建自定义数据存储界面,请使用自定义数据存储类和对象。然后,使用自定义数据存储来将数据带入MATLAB并利用MATLAB大数据功能,例如高
那Mapreduce.
, Hadoop®.
设计自定义数据存储涉及从一个或多个抽象类继承并实现所需的方法。您需要的特定类和方法取决于您的处理需求。
处理需求 |
类 |
---|---|
Matlab中的串行处理数据存储 |
|
支持并行计算工具箱™和的数据存金宝app储MATLAB并行服务器™ |
|
支持Hadoop的数据存储金宝app |
|
数据存储支持以随机顺序按住数据金宝app存储中的SAMPLES |
|
数据存储支持通过支持编写文件金宝app |
(可选择,继承 |
首先实现用于串行处理的数据存储,然后添加对并行处理、Hadoop、移动或写入的支持。金宝app
实现自定义数据存储命名MyDatastore
,创建一个脚本MyDatastore.m
.脚本必须位于MATLAB路径上,并包含从相应类继承的代码,并定义所需的方法。用于创建MATLAB中的串行处理的数据存储的代码必须:
继承来自基类matlab.io.Datastore
.
定义这些方法:哈迪塔
那读
那重置
,进步
.
根据数据处理和分析需求定义其他属性和方法。
对于示例实现,请遵循以下步骤。
步骤 | 实施 |
---|---|
继承来自基类 |
classdefmydatastore |
添加此属性可以在一台机器上创建一个数据存储,该数据存储可以在可能具有不同文件系统或操作系统的另一台机器或集群上无缝地工作。 在方法部分中添加获取和设置此属性的方法。 |
%属性支持保存,加载和处理金宝app不同文件系统计算机或群集上的%数据存储。%此外,定义方法get.alternatefilesystemroots()方法部分中的%和set.alternatefilesystemroots()。(依赖)AlternateFileSystemRoots属性结束 |
实现功能 |
方法% begin方法节函数myds = mydataStore(位置,altroots)myds.fileset = matlab.io.datastore.dsfileset(位置,...'fileextensions'那'.bin'那...“FileSplitSize”8 * 1024);myds.currentfileIndex = 1;如果Nargin == 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束 |
实施 |
函数tf = hasdata (myds)如果有更多数据可用,%返回true。tf = hasfile(myds.fileset);结束 |
实施 这种方法使用 |
函数(数据、信息)=阅读(myds)读取数据和提取数据的相关信息。如果〜hasdata(Myds)错误(Sprintf([“没有更多的数据阅读。\ nuse重置'那...方法将数据存储重置为'那...的数据。\n在调用read方法之前,那...'检查数据是否可以阅读'那...'通过使用Hasdata方法。)))结束fileinfotbl = nextfile(myds.fileset);data = myfilereader(fileinfotbl);info.size = size(数据);info.filename = fileinfotbl.filename;info.offset = fileinfotbl.offset;%更新CurrentFileIndex以跟踪进度如果fileinfotbl.offset + fileinfotbl.splitsize> =...fileinfotbl.filesize myds.currentfileIndex = myds.currentfileIndex + 1;结束结束 |
实施 |
函数重置(MYDS)%重置到数据的开始。重置(Myds.fileset);myds.currentfileIndex = 1;结束 |
定义获取和设置的方法 文件中的数据存储必须重新设置 |
在定义这些方法之前,添加AlternateFileSystemRoots属性部分中的%属性% AlternateFileSystemRoots属性的Getter函数altroots = get.alternatefilesystemroots(myds)altroots = myds.fileset.alternatefilesystemroots;结束% Setter for AlternateFileSystemRoots属性函数set.alternatefilesystemroots(Myds,Altroots)试一试% DsFileSet对象管理AlternateFileSystemRoots您的数据存储的百分比myds.fileset.alternatefilesystemroots = altroots;%重置数据存储重置(myds);捕获我扔(我);结束结束结束 |
实施 |
方法(隐藏=真)函数压裂=进步(myds)%确定从数据存储读取数据的百分比如果Hasdata(Myds)Frac =(Myds.CurrentFileIndex-1)/...myds.FileSet.NumFiles;别的Frac = 1;结束结束结束 |
实施 |
方法(访问=保护)%如果使用DSfileset对象作为属性,那么%您必须定义CopyElement方法。CopyElement.方法允许readall和preview等方法%是无状态的函数dscopy = CopyElement(DS)DSCopy = CopyElement@matlab.mixin.copeable(DS);dscopy.fileset = copy(ds.fileset);结束结束 |
结束 |
结束
|
实施读
方法使用调用的函数myfilereader.
.您必须创建此函数来读取自定义或专有数据。使用以下命令构建此函数dsfilereader.
对象及其方法。例如,创建读取二进制文件的函数。
函数data = myfilereader(fileinfotbl)%使用FileName创建一个读取器对象reader = matlab.io.datastore.dsfilereader(fileinfotbl.filename);寻找偏移量寻求(读者,fileInfoTbl。抵消,'起源'那'开始 - 文件开始');% fileInfoTbl阅读。SplitSize数据量数据=读取(reader,fileinfotbl.splitsize);结束
使用并行计算工金宝app具箱和添加对并行处理的支持MATLAB并行服务器,更新您的实现代码MyDatastore.m
到:
定义两个额外的方法:maxpartitions
和分区
.
对于示例实现,请遵循以下步骤。
步骤 | 实施 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.Partitionable… |
为以下内容添加定义 |
方法…函数subds = partition(myds,n,ii)subds = copy(myds);subds.fileset = partition(myds.fileset,n,ii);重置(Subds);结束结束 |
添加定义 |
方法(访问=保护)函数n = maxpartitions(myds. fileset);结束结束 |
结束 |
结束
|
要添加对Had金宝appoop的支持,请更新实现代码MyDatastore.m
到:
定义两个额外的方法:getLocation.
和初始化atactore.
.
对于示例实现,请遵循以下步骤。
步骤 | 实施 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.hadooplocation基计。.。 |
为以下内容添加定义 |
方法(隐藏=真)。.。函数initializeDatastore (myds hadoopInfo)导入matlab.io.datastore.dsfileset.;myds。文件集= DsFileSet (hadoopInfo,...“FileSplitSize”, myds.FileSet.FileSplitSize);重置(myds);结束函数LOC = GETLOCATION(MYDS)LOC = MYDS.FILESET;结束%iSFLFLFILE方法是可选的函数在myds. fileset . filesplitsize文件大小中,“文件”);结束结束 |
结束 |
结束
|
要添加对移动的金宝app支持,请更新MyDatastore.m
到:
从额外的类继承matlab.io.datastore.shufflable.
.
定义附加方法洗牌
.
对于示例实现,请遵循以下步骤。
步骤 | 实施 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.Shuffleable… |
为以下内容添加定义 |
方法%先前定义的方法..。函数dsnew = shuffle(DS)% dsNew = shuffle(ds)洗牌文件和数据存储中的%相应标签。%创建数据存储副本dsnew = copy(DS);dsnew.datastore = copy(ds.datastore);fds = dsnew.datastore;%洗牌文件和相应的标签numobservations = dsnew.numobservations;idx = randperm(numobservations);fds.files = fds.files(idx);dsnew.labels = dsnew.labels(Idx);结束结束 |
结束 |
结束
|
要添加对写入数金宝app据的支持,请更新您的实现代码MyDatastore.m
遵循以下要求:
从额外的类继承matlab.io.datastore.filewrity.
.
实施A.写道
如果数据存储区将数据写入自定义格式,则方法。
实施A.getfiles.
方法,如果数据存储没有文件
财产。
实施A.getFolders.
方法,如果数据存储没有文件夹
财产。
输出位置被验证为字符串。如果您的数据存储需要进一步验证,则必须实现一个validateoutputLocation.
方法。
如果数据存储均适用于每个文件需要多个读取的文件,则必须实现该方法getCurrentFilename
和currentFileIndexComparator
.
可选地,从另一个类继承matlab.io.datastore.FoldersPropertyProvider
添加对金宝app文件夹
财产(因此folderlayout.
名称值对reliteall.
)。如果你这样做,那么你可以使用populateFoldersFromLocation
数据存储区构造函数填充的方法文件夹
财产。
添加对金宝app'使用指平行'
选择reliteall.
,您必须从两者兼子matlab.io.datastore.filewrity.
和matlab.io.datastore.Partitionable
并实施A.分区
方法在支持该语法的子类中金宝app分区(DS,'文件',索引)
.
用于继承的示例实现matlab.io.datastore.filewrity.
,请遵循以下步骤。
步骤 | 实施 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.filewrity。.。 |
初始化属性 |
属性(常量)支持utputFormats =金宝app...[matlab.io.datastore.ImageDatastore.金宝appSupportedOutputFormats,“DCM”];defaultOutputFormat =.“DCM”;结束 |
添加定义 |
方法(访问=保护)函数files = getFiles(DS)文件= {'数据/文件夹/ file1'那'数据/文件夹/ file2'那...};结束函数getFolders = getFolders(ds)'数据/文件夹/'那'数据/文件夹2 /'那...};结束结束 |
添加A. |
方法(访问=保护)函数TF = Write(Myds,Data,WriteInfo,OutFMT,Varargin)如果OutFMT ==.“DCM”%使用自定义写入fcn for dcm格式dicomwrite(数据,writeInfo.suggestedOutputPutName,Varargin {:});别的%回调到内置的已知格式write@matlab.io.datastore.filewrity(Myds,Data,...writeInfo outFmt,变长度输入宗量{:});结束tf = true;结束结束 |
结束 |
结束
|
对于继承两者的较长的示例类matlab.io.datastore.filewrity.
和matlab.io.datastore.FoldersPropertyProvider
,看看为DICOM数据开发自定义数据存储.
遵循此处呈现的说明后,自定义数据存储的实现步骤已完成。在使用此自定义数据存储之前,请使用所提供的指南符合其定制数据存储测试指南.
matlab.io.Datastore
|matlab.io.datastore.dsfilereader.dsfilereader.
|matlab.io.datastore.dsfileset.
|matlab.io.datastore.filewrity.
|matlab.io.datastore.FoldersPropertyProvider
|matlab.io.datastore.HadoopLocationBased
|matlab.io.datastore.Partitionable
|matlab.io.datastore.shufflable.