主要内容

开发自定义数据存储

这一主题展示了如何实现一个自定义数据存储文件的数据。使用这个框架只有当编写自己的自定义数据存储接口。否则,标准文件格式,如图片或电子表格,从MATLAB使用现有的数据存储®。有关更多信息,请参见开始使用数据存储

概述

建立您的自定义数据存储接口,使用自定义数据存储类和对象。然后,使用自定义数据存储将数据引入MATLAB和利用MATLAB大数据等功能,mapreduce,Hadoop®

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

处理需求

数据存储在MATLAB串行处理

matlab.io.Datastore

看到为串行处理实现数据存储

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

matlab.io.Datastorematlab.io.datastore.Partitionable

看到支持并行金宝app处理

数据存储与对Hadoop的支持金宝app

matlab.io.Datastorematlab.io.datastore.HadoopLocationBased

看到添加对H金宝appadoop的支持

数据存储支持洗牌样本数据存储以金宝app随机的顺序

matlab.io.Datastorematlab.io.datastore.Shuffleable

看到添加对洗金宝app牌的支持

通过数据存储支持写文件金宝appwriteall

matlab.io.Datastorematlab.io.datastore.FileWritable

(可选,继承matlab.io.datastore.FoldersPropertyProvider增加了支持金宝app文件夹财产。)

看到添加对写金宝app入数据的支持

通过实现数据存储进行串行处理开始,然后添加支持并行处理,Hadoop,洗牌,或者写作。金宝app

为串行处理实现数据存储

实现一个自定义数据存储MyDatastore,创建一个脚本MyDatastore.m。该脚本必须在MATLAB路径和应包含的代码继承自适当的类,并定义了所需的方法。为串行处理的代码创建一个数据存储在MATLAB必须:

  • 从基类继承matlab.io.Datastore

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

  • 定义额外的属性和方法根据你的数据处理和分析的需要。

对于一个示例实现,遵循这些步骤。

步骤 实现

从基类继承数据存储

classdefMyDatastore < matlab.io.Datastore属性(访问=私人)CurrentFileIndex文件集matlab.io.datastore.DsFileSet结束

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

添加方法获取和设置这个属性在方法部分。

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

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

方法%开始方法部分函数myds = MyDatastore(位置,altRoots) myds。文件集= matlab.io.datastore.DsFileSet(location,“FileExtensions”,“。斌”,“FileSplitSize”8 * 1024);myds。CurrentFileIndex = 1;如果输入参数个数= = 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束

实现hasdata方法。

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

实现方法。

这种方法使用MyFileReader,这是一个函数,必须创建阅读您的专有文件格式。

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

函数(数据、信息)=阅读(myds)%读取数据和信息提取的数据。如果~ hasdata (myds)错误(sprintf ([没有更多的数据来读。\ nUse重置”,的方法来重置数据存储的开始,的数据。\ nBefore调用读方法,,检查数据是否可读的,“通过使用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 AlternateFileSystemRoots财产函数altRoots = get.AlternateFileSystemRoots (myds) altRoots = myds.FileSet.AlternateFileSystemRoots;结束% AlternateFileSystemRoots属性的Setter函数set.AlternateFileSystemRoots (myds altRoots)试一试%管理AlternateFileSystemRoots DsFileSet对象%为您的数据存储myds.FileSet。AlternateFileSystemRoots = altRoots;%重置数据存储重置(myds);我把(我);结束结束结束

实现进步方法。

方法(隐藏= true)函数压裂=进步(myds)%的比例确定数据读取数据存储如果hasdata (myds)压裂= (myds.CurrentFileIndex-1) /myds.FileSet.NumFiles;其他的压裂= 1;结束结束结束

实现copyElement当你使用的方法DsFileSet在你的数据存储对象属性。

方法(访问=保护)%如果使用DsFileSet对象属性,然后%必须定义copyElement方法。的copyElement%方法允许readall和预览等方法%是无状态的函数dscopy = copyElement (ds) dscopy = copyElement@matlab.mixin.Copyable (ds);dscopy。文件集= (ds.FileSet)复印件;结束结束

结束classdef部分。

结束

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

的实现您的自定义数据存储的方法使用一个函数调用MyFileReader。你必须创建这个函数读取您的自定义或专有的数据。构建这个函数使用DsFileReader对象及其方法。例如,创建一个函数读取二进制文件。

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

支持并行金宝app处理

添加支持并行处金宝app理与并行计算工具箱MATLAB并行服务器更新你的实现代码MyDatastore.m:

对于一个示例实现,遵循这些步骤。

步骤 实现

更新classdef部分的继承的分区类。

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

添加的定义分区方法部分。

方法。函数再分=分区(myds, n, 2)再分= (myds)复印件;再分。文件集=分区(myds.FileSet n ii);重置(再分);结束结束

添加定义maxpartitions方法部分。

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

结束classdef

结束

添加对H金宝appadoop的支持

添加对Hado金宝appop的支持,更新您的实现代码MyDatastore.m:

对于一个示例实现,遵循这些步骤。

步骤 实现

更新classdef部分的继承HadoopLocationBased类。

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

添加的定义getLocation,initializeDatastore,isfullfile(可选)方法部分。

方法(隐藏= true)。函数initializeDatastore (myds hadoopInfo)导入matlab.io.datastore.DsFileSet;myds。文件集= DsFileSet (hadoopInfo,“FileSplitSize”,myds.FileSet.FileSplitSize);重置(myds);结束函数loc = getLocation (myds) loc = myds.FileSet;结束% isfullfile方法是可选的函数tf = isfullfile (myds) = isequal特遣部队(myds.FileSet.FileSplitSize,“文件”);结束结束

结束classdef部分。

结束

添加对洗金宝app牌的支持

添加支持洗牌,金宝app更新您的实现代码MyDatastore.m:

对于一个示例实现,遵循这些步骤。

步骤 实现

更新classdef部分的继承Shuffleable类。

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

添加的定义洗牌对现有方法部分。

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

结束classdef部分。

结束

添加对写金宝app入数据的支持

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

继承自的一个示例实现matlab.io.datastore.FileWritable,遵循这些步骤。

步骤 实现

更新classdef部分的继承FileWritable类。

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

初始化属性金宝appSupportedOutputFormatsDefaultOutputFormat。在本例中,数据存储支持的输出格式金宝appImageDatastore,以及一个自定义的格式“dcm”也声明为默认输出格式。

属性(常数)SupportedOutputF金宝appormats =[matlab.io.datastore.ImageDatastore.金宝appSupportedOutputFormats,“dcm”];DefaultOutputFormat =“dcm”;结束

添加定义getfilegetFolders对现有方法部分。这些方法要求数据存储时没有文件文件夹属性。

方法(访问=保护)函数文件= getfile (ds)文件= {“数据/文件夹/ file1”,“数据/文件夹/ file2”,};结束函数文件夹= getFolders (ds)文件夹= {“数据/ folder1 /”,“数据/ folder2 /”,};结束结束

添加一个方法当数据存储打算写数据到自定义格式。在本例中,该方法使用自定义编写函数之间的切换“dcm”和内置函数已知的格式写。

方法(访问=保护)函数tf =写(myds、数据writeInfo outFmt,变长度输入宗量)如果outFmt = =“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数据

验证自定义数据存储

在这里给出的指令后,您的自定义数据存储的实现步骤就完成了。之前使用这个自定义数据存储,使用提出的指导方针测试指南自定义数据存储

另请参阅

|||||||

相关的话题