主要内容

开发自定义数据存储

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

概述

要构建自定义数据存储界面,请使用自定义数据存储类和对象。然后,使用自定义数据存储来将数据带入MATLAB并利用MATLAB大数据功能,例如Mapreduce., Hadoop®

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

处理需求

Matlab中的串行处理数据存储

matlab.io.Datastore

实现串行处理的数据存储

支持并行计算工具箱™和的数据存金宝app储MATLAB并行服务器™

matlab.io.Datastorematlab.io.datastore.Partitionable

添加支持金宝app并行处理

支持Hadoop的数据存储金宝app

matlab.io.Datastorematlab.io.datastore.HadoopLocationBased

为Had金宝appoop添加支持

数据存储支持以随机顺序按住数据金宝app存储中的SAMPLES

matlab.io.Datastorematlab.io.datastore.shufflable.

添加支持金宝app洗牌

数据存储支持通过支持编写文件金宝appreliteall.

matlab.io.Datastorematlab.io.datastore.filewrity.

(可选择,继承matlab.io.datastore.FoldersPropertyProvider添加对金宝app文件夹财产。)

添加支持金宝app数据

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

实现串行处理的数据存储

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

  • 继承来自基类matlab.io.Datastore

  • 定义这些方法:哈迪塔重置,进步

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

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

步骤 实施

继承来自基类数据存储

classdefmydatastore 属性(Access = private) CurrentFileIndex双人间文件集matlab.io.datastore.dsfileset.结束

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

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

%属性支持保存,加载和处理金宝app不同文件系统计算机或群集上的%数据存储。%此外,定义方法get.alternatefilesystemroots()方法部分中的%和set.alternatefilesystemroots()。(依赖)AlternateFileSystemRoots属性结束

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

方法% 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);结束

实施方法。

这种方法使用myfilereader.,这是您必须创建的函数以读取所有文件格式。

创建功能以阅读您的专有文件格式

函数(数据、信息)=阅读(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;结束

定义获取和设置的方法lexeryfilesystemroots.财产。

文件中的数据存储必须重新设置方法。

在定义这些方法之前,添加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;结束结束结束

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

方法(访问=保护)%如果使用DSfileset对象作为属性,那么%您必须定义CopyElement方法。CopyElement.方法允许readall和preview等方法%是无状态的函数dscopy = CopyElement(DS)DSCopy = CopyElement@matlab.mixin.copeable(DS);dscopy.fileset = copy(ds.fileset);结束结束

结束classdef部分。

结束

创建功能以阅读您的专有文件格式

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

函数data = myfilereader(fileinfotbl)%使用FileName创建一个读取器对象reader = matlab.io.datastore.dsfilereader(fileinfotbl.filename);寻找偏移量寻求(读者,fileInfoTbl。抵消,'起源''开始 - 文件开始');% fileInfoTbl阅读。SplitSize数据量数据=读取(reader,fileinfotbl.splitsize);结束

添加支持金宝app并行处理

使用并行计算工金宝app具箱和添加对并行处理的支持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);重置(Subds);结束结束

添加定义maxpartitions方法部分。

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

结束classdef

结束

为Had金宝appoop添加支持

要添加对Had金宝appoop的支持,请更新实现代码MyDatastore.m到:

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

步骤 实施

更新classdef剖面继承自HadoopLocationBased类。

classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.hadooplocation基计。.。

为以下内容添加定义getLocation.初始化atactore.,isl.(可选)方法部分。

方法(隐藏=真)。.。函数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文件大小中,“文件”);结束结束

结束classdef部分。

结束

添加支持金宝app洗牌

要添加对移动的金宝app支持,请更新MyDatastore.m到:

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

步骤 实施

更新classdef剖面继承自擦拭类。

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);结束结束

结束classdef部分。

结束

添加支持金宝app数据

要添加对写入数金宝app据的支持,请更新您的实现代码MyDatastore.m遵循以下要求:

用于继承的示例实现matlab.io.datastore.filewrity.,请遵循以下步骤。

步骤 实施

更新classdef剖面继承自FileWritable类。

classdefMyDatastore < matlab.io.Datastore &...matlab.io.datastore.filewrity。.。

初始化属性金宝app支持的upTutFormats.DefaultOutputFormat.在此示例中,数据存储区支持所有输出格式金宝appimageageAtastore.以及自定义格式“DCM”,这也被声明为默认输出格式。

属性(常量)支持utputFormats =金宝app...[matlab.io.datastore.ImageDatastore.金宝appSupportedOutputFormats,“DCM”];defaultOutputFormat =.“DCM”结束

添加定义getfiles.getFolders.对现有方法部分。当数据存储没有时需要这些方法文件文件夹属性。

方法(访问=保护)函数files = getFiles(DS)文件= {'数据/文件夹/ file1''数据/文件夹/ file2'...};结束函数getFolders = getFolders(ds)'数据/文件夹/''数据/文件夹2 /'...};结束结束

添加A.写道当数据存储旨在将数据写入自定义格式时的方法。在此示例中,该方法在使用自定义写入功能之间切换“DCM”以及已知格式的内置写入功能。

方法(访问=保护)函数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;结束结束

结束classdef部分。

结束

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

验证自定义数据存储

遵循此处呈现的说明后,自定义数据存储的实现步骤已完成。在使用此自定义数据存储之前,请使用所提供的指南符合其定制数据存储测试指南

另请参阅

|||||||

相关的话题