本主题展示如何为基于文件的数据实现自定义数据存储。只有在编写自己的自定义数据存储接口时才使用此框架。否则,对于标准文件格式,如图像或电子表格,使用来自MATLAB的现有数据存储®.有关更多信息,请参见开始使用数据存储.
要构建自定义数据存储接口,请使用自定义数据存储类和对象。然后,使用自定义数据存储将您的数据导入MATLAB,并利用MATLAB大数据功能,如高
,Mapreduce.
, Hadoop®.
设计自定义数据存储涉及从一个或多个抽象类继承并实现所需的方法。您需要的特定类和方法取决于您的处理需求。
处理需求 |
类 |
---|---|
Matlab中的串行处理数据存储 |
|
支持并行计算工具箱™和的数据存万博1manbetx储MATLAB并行服务器™ |
|
支持Hadoop的数据存储万博1manbetx |
|
支持在数据存储中按随机顺序变换万博1manbetx样本的数据存储 |
|
数据存储支持通过支持编写文件万博1manbetx |
(可选择,继承 |
首先实现用于串行处理的数据存储,然后添加对并行处理、Hadoop、移动或写入的支持。万博1manbetx
来实现一个自定义的数据存储MyDatastore
,创建一个脚本MyDatastore.m
.该脚本必须在MATLAB路径上,并且应该包含从适当的类继承的代码,并定义所需的方法。在MATLAB中创建串行处理数据存储的代码必须:
继承来自基类matlab.io.Datastore
.
定义这些方法:hasdata
,读
,重置
,进步
.
根据数据处理和分析需求定义其他属性和方法。
对于示例实现,请遵循以下步骤。
脚步 | 执行 |
---|---|
继承来自基类 |
classdefMyDatastore < matlab.io.Datastore属性(Access = private) CurrentFileIndex双倍的文件集matlab.io.datastore.DsFileSet结束 |
添加此属性可以在一台机器上创建一个数据存储,该数据存储可以在可能具有不同文件系统或操作系统的另一台机器或集群上无缝地工作。 在方法部分中添加获取和设置此属性的方法。 |
%属性支持保存,加载和处理万博1manbetx%数据存储在不同的文件系统机器或集群上。%此外,定义方法get.alternatefilesystemroots()%和set.AlternateFileSystemRoots()在方法部分。(依赖)AlternateFileSystemRoots属性结束 |
实现的功能 |
方法% begin方法节函数myds = mydataStore(位置,altroots)myds.fileset = matlab.io.datastore.dsfileset(位置,...'fileextensions',“。斌”,...“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);信息。大小=大小(数据);信息。文件名= fileInfoTbl.FileName;信息。抵消= fileInfoTbl.Offset;%更新CurrentFileIndex以跟踪进度如果fileInfoTbl。抵消+ fileInfoTbl。SplitSize > =...fileInfoTbl。文件大小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;其他的压裂= 1;结束结束结束 |
实现 |
方法(Access = protected)%如果使用DsFileSet对象作为属性,则%您必须定义copelement方法。的copyElement方法允许readall和preview等方法%是无状态的函数dscopy = CopyElement(DS)DSCopy = CopyElement@matlab.mixin.copeable(DS);dscopy.fileset = copy(ds.fileset);结束结束 |
结束 |
结束
|
实现读
方法使用调用的函数MyFileReader
.您必须创建此函数来读取自定义或专有数据。使用以下命令构建此函数dsfilereader.
对象及其方法。例如,创建一个读取二进制文件的函数。
函数data = MyFileReader (fileInfoTbl)%使用FileName创建一个读取器对象读者= matlab.io.datastore.DsFileReader (fileInfoTbl.FileName);寻找偏移量寻求(读者,fileInfoTbl。抵消,“起源”,'开始 - 文件开始');% fileInfoTbl阅读。SplitSize数据量数据=读取(reader,fileinfotbl.splitsize);结束
使用并行计算工万博1manbetx具箱和添加对并行处理的支持MATLAB并行服务器,更新您的实现代码MyDatastore.m
:
定义两个额外的方法:maxpartitions
和分区
.
对于示例实现,请遵循以下步骤。
脚步 | 执行 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.Partitionable… |
为以下内容添加定义 |
方法…函数Subds = partition(myds,n,ii); / /分区再分。文件集=分区(myds.FileSet n ii);重置(再分);结束结束 |
添加定义 |
方法(Access = protected)函数n = maxpartitions(myds. fileset);结束结束 |
结束 |
结束
|
要添加对Had万博1manbetxoop的支持,请更新实现代码MyDatastore.m
:
定义两个额外的方法:getLocation
和initializeDatastore
.
对于示例实现,请遵循以下步骤。
脚步 | 执行 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.hadooplocation基计。.. |
为以下内容添加定义 |
方法(Hidden = true)…函数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文件大小中,“文件”);结束结束 |
结束 |
结束
|
要添加对移动的万博1manbetx支持,请更新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。文件= fds.Files (idx);dsNew。标签= dsNew.Labels (idx);结束结束 |
结束 |
结束
|
要添加对写入数万博1manbetx据的支持,请更新实现代码MyDatastore.m
遵循以下要求:
从额外的类继承matlab.io.datastore.FileWritable
.
实现一个写
方法,如果数据存储将数据写入自定义格式。
实现一个getfile
方法,如果数据存储没有文件
财产。
实现一个getFolders
方法,如果数据存储没有文件夹
财产。
输出位置被验证为一个字符串。如果数据存储需要进一步验证,则必须实现validateoutputLocation.
方法。
如果数据存储用于每个文件需要多次读取的文件,那么您必须实现这些方法getCurrentFilename
和currentFileIndexComparator
.
可选地,从另一个类继承matlab.io.datastore.FoldersPropertyProvider
添加对万博1manbetx文件夹
财产(因此FolderLayout
名称-值对的writeall
)。如果你这样做,那么你可以使用populateFoldersFromLocation
方法填充数据存储构造函数中的文件夹
财产。
添加对万博1manbetx“UseParallel”
选择writeall
,您必须从两者兼子matlab.io.datastore.FileWritable
和matlab.io.datastore.Partitionable
并实现分区
方法在支持该语法的子类中万博1manbetx分区(ds,‘文件’,指数)
.
用于继承的示例实现matlab.io.datastore.FileWritable
,请遵循以下步骤。
脚步 | 执行 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.filewrity。.. |
初始化属性 |
properties(常量)Supporte万博1manbetxdOutputFormats =...[matlab.io.datastore.ImageDatastore.万博1manbetxSupportedOutputFormats,“DCM”];defaultOutputFormat =.“DCM”;结束 |
添加定义 |
方法(Access = protected)函数getFiles(ds) files = {'数据/文件夹/ file1','数据/文件夹/ file2',...};结束函数getFolders = getFolders(ds)“数据/ folder1 /”,“数据/ folder2 /”,...};结束结束 |
添加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.FileWritable
和matlab.io.datastore.FoldersPropertyProvider
,请参阅为DICOM数据开发自定义数据存储.
按照这里给出的说明执行之后,自定义数据存储的实现步骤就完成了。在使用这个自定义数据存储之前,请使用定制数据存储测试指南.
matlab.io.Datastore
|matlab.io.datastore.DsFileReader
|matlab.io.datastore.DsFileSet
|matlab.io.datastore.FileWritable
|matlab.io.datastore.FoldersPropertyProvider
|matlab.io.datastore.HadoopLocationBased
|matlab.io.datastore.Partitionable
|matlab.io.datastore.shufflable.