开发自定义数据存储
这一主题展示了如何实现一个自定义数据存储文件的数据。使用这个框架只有当编写自己的自定义数据存储接口。否则,标准文件格式,如图片或电子表格,从MATLAB使用现有的数据存储®。有关更多信息,请参见开始使用数据存储。
概述
建立您的自定义数据存储接口,使用自定义数据存储类和对象。然后,使用自定义数据存储将数据引入MATLAB和利用MATLAB大数据等功能高
,mapreduce
,Hadoop®。
您的自定义数据存储的设计涉及到从一个或多个抽象类继承和实现所需的方法。你所需要的特定的类和方法取决于您的处理需求。
处理需求 |
类 |
---|---|
数据存储在MATLAB串行处理 |
|
支持并行计算工具箱™和数据存储金宝appMATLAB并行服务器™ |
|
数据存储与对Hadoop的支持金宝app |
|
数据存储支持洗牌样本数据存储以金宝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属性结束 |
实现的功能 |
方法%开始方法部分函数myds = MyDatastore(位置,altRoots) myds。文件集= matlab.io.datastore.DsFileSet(location,…“FileExtensions”,“。斌”,…“FileSplitSize”8 * 1024);myds。CurrentFileIndex = 1;如果输入参数个数= = 2 myds。AlternateFileSystemRoots = altRoots;结束重置(myds);结束 |
实现 |
函数tf = hasdata (myds)%返回true,如果更多的数据是可用的。tf = hasfile (myds.FileSet);结束 |
实现 这种方法使用 |
函数(数据、信息)=阅读(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%属性在属性部分% 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;结束结束结束 |
实现 |
方法(访问=保护)%如果使用DsFileSet对象属性,然后%必须定义copyElement方法。的copyElement%方法允许readall和预览等方法%是无状态的函数dscopy = copyElement (ds) dscopy = copyElement@matlab.mixin.Copyable (ds);dscopy。文件集= (ds.FileSet)复印件;结束结束 |
结束 |
结束
|
创建函数来读取您的专有文件格式
的实现读
您的自定义数据存储的方法使用一个函数调用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
:
从另外一个类继承
matlab.io.datastore.Partitionable
。定义两个额外的方法:
maxpartitions
和分区
。
对于一个示例实现,遵循这些步骤。
步骤 | 实现 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore&…matlab.io.datastore.Partitionable。 |
添加的定义 |
方法。函数再分=分区(myds, n, 2)再分= (myds)复印件;再分。文件集=分区(myds.FileSet n ii);重置(再分);结束结束 |
添加定义 |
方法(访问=保护)函数n = maxpartitions (myds) n = maxpartitions (myds.FileSet);结束结束 |
结束 |
结束
|
添加对H金宝appadoop的支持
添加对Hado金宝appop的支持,更新您的实现代码MyDatastore.m
:
定义两个额外的方法:
getLocation
和initializeDatastore
。
对于一个示例实现,遵循这些步骤。
步骤 | 实现 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore&…matlab.io.datastore.HadoopLocationBased。 |
添加的定义 |
方法(隐藏= 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,“文件”);结束结束 |
结束 |
结束
|
添加对洗金宝app牌的支持
添加支持洗牌,金宝app更新您的实现代码MyDatastore.m
:
从另外一个类继承
matlab.io.datastore.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);结束结束 |
结束 |
结束
|
添加对写金宝app入数据的支持
添加支持写入数金宝app据,更新您的实现代码MyDatastore.m
遵循这些要求:
从另外一个类继承
matlab.io.datastore.FileWritable
。实现一个
写
如果数据存储方法写数据到自定义格式。实现一个
getfile
如果数据存储没有方法文件
财产。实现一个
getFolders
如果数据存储没有方法文件夹
财产。输出的位置作为字符串进行验证。如果你的数据存储需要进一步的验证,必须实现一个
validateOutputLocation
方法。如果文件的数据存储是需要多个读取每个文件,然后你必须实现的方法
getCurrentFilename
和currentFileIndexComparator
。可选地,继承另一个类
matlab.io.datastore.FoldersPropertyProvider
添加支持金宝app文件夹
(和属性FolderLayout
名称-值对的writeall
)。如果你这样做,那么您可以使用populateFoldersFromLocation
数据存储的方法构造函数来填充文件夹
财产。添加支持金宝app
“UseParallel”
选择writeall
,你必须从两个子类matlab.io.datastore.FileWritable
和matlab.io.datastore.Partitionable
并实现分区
支持语法方法的子类金宝app分区(ds,‘文件’,指数)
。
继承自的一个示例实现matlab.io.datastore.FileWritable
,遵循这些步骤。
步骤 | 实现 |
---|---|
更新 |
classdefMyDatastore < matlab.io.Datastore&…matlab.io.datastore.FileWritable。 |
初始化属性 |
属性(常数)SupportedOutputF金宝appormats =…[matlab.io.datastore.ImageDatastore.金宝appSupportedOutputFormats,“dcm”];DefaultOutputFormat =“dcm”;结束 |
添加定义 |
方法(访问=保护)函数文件= getfile (ds)文件= {“数据/文件夹/ file1”,“数据/文件夹/ file2”,…};结束函数文件夹= getFolders (ds)文件夹= {“数据/ folder1 /”,“数据/ folder2 /”,…};结束结束 |
添加一个 |
方法(访问=保护)函数tf =写(myds、数据writeInfo outFmt,变长度输入宗量)如果outFmt = =“dcm”%使用自定义编写fcn dcm格式writeInfo dicomwrite(数据。SuggestedOutputName,变长度输入宗量{:});其他的%调到内置的已知的格式write@matlab.io.datastore。FileWritable (myds、数据…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.Shuffleable