主要内容

开发自定义数据存储

本主题介绍如何为基于文件的数据实现自定义数据存储。仅在编写自己的自定义数据存储接口时使用此框架。否则,对于标准文件格式,如图像或电子表格,请使用MATLAB中的现有数据存储®.有关更多信息,请参见开始使用数据存储

概述

要构建自定义数据存储接口,请使用自定义数据存储类和对象。然后,使用自定义数据存储将数据导入MATLAB,并利用MATLAB大数据功能,如高的,mapreduce, Hadoop®

设计自定义数据存储涉及从一个或多个抽象类继承并实现所需的方法。您需要的特定类和方法取决于您的处理需求。

处理需求

MATLAB中的串行处理数据存储

matlab.io.Datastore

看见实现串行处理的数据存储

支持并行计算工具箱™和的数据存万博1manbetx储MATLAB并行服务器™

matlab.io.Datastorematlab.io.datastore.Partitionable

看见添加对并万博1manbetx行处理的支持

支持Hadoop的数据存储万博1manbetx

matlab.io.Datastorematlab.io.datastore.HadoopLocationBased

看见对Had万博1manbetxoop的支持

支持在数据存储中随机排列样本的万博1manbetx数据存储

matlab.io.Datastorematlab.io.datastore.Shuffleable

看见添加对洗万博1manbetx牌的支持

支持写文件的数据存储万博1manbetx书面语

matlab.io.Datastorematlab.io.datastore.FileWritable

(可选,继承matlab.io.datastore.FoldersPropertyProvider添加对万博1manbetx文件夹财产。)

看见添加支持万博1manbetx写入数据

首先实现用于串行处理的数据存储,然后添加对并行处理、Hadoop、移动或写入的支持。万博1manbetx

实现串行处理的数据存储

实现名为MyDatastore,创建脚本MyDatastore.m。脚本必须位于MATLAB路径上,并且应包含从相应类继承的代码,并定义所需的方法。在MATLAB中创建用于串行处理的数据存储的代码必须:

  • 从基类继承matlab.io.Datastore

  • 定义这些方法:hasdata,,重置,进步

  • 根据数据处理和分析需求定义其他属性和方法。

对于示例实现,请遵循以下步骤。

步骤 实现

从基类继承数据存储

classdefMyDatastore属性(Access = private) CurrentFileIndex文件集matlab.io.datastore.DsFileSet结束

添加此属性可以在一台机器上创建一个数据存储,该数据存储可以在可能具有不同文件系统或操作系统的另一台机器或集群上无缝地工作。

在方法部分中添加获取和设置此属性的方法。

属性支持保存、加载和处理万博1manbetx%不同文件系统计算机或群集上的数据存储。另外,定义get.AlternateFileSystemRoots()方法%并在方法部分中设置.AlternateFileSystemRoots()。(依赖)AlternateFileSystemRoots属性结束

实现功能MyDatastore创建自定义数据存储。

方法% begin方法节函数myds = MyDatastore(location,altRoots)文件集= matlab.io.datastore.DsFileSet(location,...“FileExtensions”,"宾先生",...“FileSplitSize”8 * 1024);myds。CurrentFileIndex = 1;如果Nargin == 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束

实施hasdata方法。

函数tf = hasdata (myds)%如果有更多可用数据,则返回true。tf=hasfile(myds.FileSet);结束

实施方法。

此方法使用MyFileReader,这是一个必须创建才能读取专有文件格式的函数。

看见创建函数来读取您的专有文件格式

函数(数据、信息)=阅读(myds)读取数据和提取数据的相关信息。如果~ hasdata (myds)错误(sprintf ([“没有更多的数据要读了。\nUse the reset ',...方法将数据存储重置为',...的数据。\n在调用read方法之前,,...'检查数据是否可用来读取',...'通过使用hasdata方法。')))结束fileInfoTbl=nextfile(myds.FileSet);data=MyFileReader(fileInfoTbl);info.Size=Size(data);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属性部分中的%属性% AlternateFileSystemRoots属性的Getter函数altRoots = get. fileset . alternatefilesystemroots (myds);结束% Setter for AlternateFileSystemRoots属性函数set.alternativeFileSystemRoots(myds、altRoots)试一试% DsFileSet对象管理AlternateFileSystemRoots%用于您的数据存储myds.FileSet.AlternateFileSystemRoots = altRoots;%重置数据存储重置(myds);我扔(我);结束结束结束

实施进步方法。

方法(Hidden = true)函数压裂=进步(myds)%确定从数据存储读取数据的百分比如果hasdata(myds) frac = (myds. currentfileindex -1)/...myds.FileSet.NumFiles;其他的分形=1;结束结束结束

实施copyElement方法,当你使用数据文件集对象作为数据存储中的属性。

方法(访问=受保护)%如果使用DsFileSet对象作为属性,则%您必须定义copyElement方法。copyElement方法允许readall和preview等方法%是无状态的函数dscopy = copelement (ds);dscopy。文件集= (ds.FileSet)复印件;结束结束

结束classdef部分。

结束

创建函数来读取您的专有文件格式

实施方法使用调用的函数MyFileReader.您必须创建此函数来读取自定义或专有数据。使用以下命令构建此函数DsFileReader对象及其方法。例如,创建一个读取二进制文件的函数。

函数data=MyFileReader(fileInfoTbl)%使用FileName创建一个读取器对象reader=matlab.io.datastore.DsFileReader(fileInfoTbl.FileName);寻找偏移量寻求(读者,fileInfoTbl。抵消,“起源”,“start-of-file”);% fileInfoTbl阅读。SplitSize数据量data =阅读(读者,fileInfoTbl.SplitSize);结束

添加对并万博1manbetx行处理的支持

使用并行计算工万博1manbetx具箱和添加对并行处理的支持MATLAB并行服务器,更新您的实现代码MyDatastore.m致:

对于示例实现,请遵循以下步骤。

步骤 实现

更新classdef节从继承的分区类。

classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.Partitionable…

为以下内容添加定义分区方法部分。

方法…函数subds=partition(myds,n,ii)subds=copy(myds);subds.FileSet=partition(myds.FileSet,n,ii);reset(subds);结束结束

添加定义maxpartitions方法部分。

方法(访问=受保护)函数n = maxpartitions(myds. fileset);结束结束

终点classdef

结束

对Had万博1manbetxoop的支持

要添加对Had万博1manbetxoop的支持,请更新实现代码MyDatastore.m致:

对于示例实现,请遵循以下步骤。

步骤 实现

更新classdef节从继承HadoopLocationBased类。

classdefMyDatastore < matlab.io.Datastore &...基于hadoop定位的…

为以下内容添加定义获取位置,初始化为tastore,isfullfile(可选)方法部分。

方法(隐藏=真)。函数initializeDatastore (myds hadoopInfo)导入matlab.io.datastore.DsFileSet;myds。文件集= DsFileSet (hadoopInfo,...“FileSplitSize”, myds.FileSet.FileSplitSize);重置(myds);结束函数loc=getLocation(myds)loc=myds.FileSet;结束% isfullfile方法是可选的函数在myds. fileset . filesplitsize文件大小中,“文件”);结束结束

结束classdef部分。

结束

添加对洗万博1manbetx牌的支持

要添加对移动的万博1manbetx支持,请更新MyDatastore.m致:

对于示例实现,请遵循以下步骤。

步骤 实现

更新classdef节从继承Shuffleable类。

classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.Shuffleable…

为以下内容添加定义洗牌对现有方法部分。

方法%先前定义的方法. . .函数dsNew = shuffle (ds)% dsNew = shuffle(ds)洗牌文件和%数据存储中相应的标签。%创建数据存储的副本dsNew = (ds)复印件;dsNew。数据存储= (ds.Datastore)复印件;fds = dsNew.Datastore;%洗牌文件和相应的标签numObservations=dsNew.numObservations;idx=randperm(numObservations);fds.Files=fds.Files(idx);dsNew.Labels=dsNew.Labels(idx);结束结束

结束classdef部分。

结束

添加支持万博1manbetx写入数据

要添加对写入数万博1manbetx据的支持,请在中更新实现代码MyDatastore.m要遵守这些要求:

的示例实现matlab.io.datastore.FileWritable,请遵循以下步骤。

步骤 实现

更新classdef节从继承FileWritable类。

classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.FileWritable…

初始化属性万博1manbetxSupportedOutputFormatsDefaultOutputFormat。在此示例中,数据存储支持的所有输出格式万博1manbetx图像数据存储,以及自定义格式“dcm”,它也声明为默认输出格式。

属性(常量)支持的输出格式=万博1manbetx...[matlab.io.datastore.ImageDatastore.万博1manbetxSupportedOutputFormats,“dcm”];DefaultOutputFormat =“dcm”结束

为添加定义获取文件获取文件夹对现有方法当数据存储没有文件文件夹属性。

方法(访问=受保护)函数文件=getFiles(ds)文件={“数据/文件夹/ file1”,“数据/文件夹/ file2”,...};结束函数getFolders = getFolders(ds)“数据/文件夹1/”,“数据/文件夹2/”,...};结束结束

添加一个方法,当数据存储打算将数据写入自定义格式时。在本例中,该方法在使用自定义写入函数“dcm”以及针对已知格式的内置write函数。

方法(访问=受保护)函数tf = write(myds, data, writeInfo, outFmt, varargin)如果出口==“dcm”%使用自定义写入FCN的DCM格式writeInfo dicomwrite(数据。SuggestedOutputName,变长度输入宗量{:});其他的%回调到内置的已知格式write@matlab.io.datastore.FileWritable (myds、数据...writeInfo outFmt,变长度输入宗量{:});结束tf = true;结束结束

结束classdef部分。

结束

对于继承两者的较长的示例类matlab.io.datastore.FileWritablematlab.io.datastore.FoldersPropertyProvider看见为DICOM数据开发自定义数据存储

验证自定义数据存储

按照此处提供的说明进行操作后,自定义数据存储的实现步骤就完成了。在使用此自定义数据存储之前,请使用中提供的指南对其进行鉴定自定义数据存储的测试指南

另见

|||||||

相关的话题