主要内容

fileDatastore

带有自定义文件阅读器的数据存储

描述

使用一个FileDatastore对象来管理自定义格式文件的大型集合,其中集合不一定适合内存,或者大型自定义格式文件不适合内存。你可以创建一个FileDatastore对象。fileDatastore函数,指定其属性,然后使用对象函数导入和处理数据。

创建

描述

fds= fileDatastore (位置“ReadFcn”,@fcn指定的文件集合创建数据存储位置并使用函数fcn从文件中读取数据。

例子

fds= fileDatastore (位置“ReadFcn”,@fcn名称,值指定其他参数和属性fds使用一个或多个名称-值对参数。例如,您可以根据文件的扩展名指定在数据存储中包含哪些文件fileDatastore(位置、“ReadFcn @customreader“FileExtensions”(“开头”、“.extx”))

输入参数

全部展开

包含在数据存储中的文件或文件夹,指定为文件集对象,作为文件路径,或作为DsFileSet对象。

  • 文件集object -你可以指定位置作为一个文件集对象。指定位置为文件集对象可以缩短数据存储的构建时间,而不是指定路径或DsFileSet对象。有关更多信息,请参见matlab.io.datastore.FileSet

  • 文件路径-您可以将单个文件路径指定为字符矢量或字符串标量。您可以将多个文件路径指定为字符向量的单元格数组或字符串数组。

  • DsFileSetobject -你可以指定一个DsFileSet对象。有关更多信息,请参见matlab.io.datastore.DsFileSet

文件或文件夹可以是本地的或远程的:

  • 本地文件或文件夹—指定文件或文件夹的本地路径。如果文件不在当前文件夹中,则指定完整路径或相对路径。指定文件夹的子文件夹中的文件不会自动包含在数据存储中。指定本地路径时,可以使用通配符“*”。此字符指定数据存储包括所有匹配文件或匹配文件夹中的所有文件。

  • 远程文件或文件夹——将远程文件或文件夹的完整路径指定为表单的统一资源定位符(URL)hdfs: / / /path_to_file。有关更多信息,请参见处理远程数据

指定文件夹时,数据存储只包含支持文件格式的文件,而忽略其他格式的文件。金宝app若要指定要包含在数据存储中的文件扩展名的自定义列表,请参见FileExtensions财产。

例子:“file1.ext”

例子:“. . / dir /数据/ file1.ext”

例子:{“C: \ dir \ data \ file1.exts”,“C: \ dir \ data \ file2.extx”}

例子:“C: \ dir \ data \ * . ext "

读取文件数据的函数,指定为函数句柄。

由函数句柄表示的函数的签名@fcn取决于指定的值ReadMode。读取文件数据的函数必须确认这些签名中的一个。

ReadMode

ReadFcn签名

“文件”(默认)

函数必须有这样的签名:

函数数据= MyReadFcn(文件名)…结束

文件名—要读取的文件名。

数据—对应的文件数据。

“partialfile”

函数必须有这样的签名:

function [data,userdata,done] = MyReadFcn(filename,userdata)…结束

用户数据—设置和读取字段用户数据在多个之间持久化数据FileDatastore读调用。

完成-设置这个逻辑对任意一方的论证真正的

  • —继续读取当前文件。

  • 真正的—终止当前文件读取,读取下一个文件。

数据-部分文件数据。

“字节”

函数必须有这样的签名:

函数数据= MyReadFcn(文件名,偏移量,大小)…结束

抵消-指定从文件第一个字节开始的字节偏移量。

大小—指定当前读取操作要读取的字节数。

数据中指定大小的部分文件数据BlockSize

FileDatastore同时增加抵消大小中指定值的输入BlockSize

中指定的值@fcn的值ReadFcn财产。

例子:@customreader

数据类型:function_handle

名称-值对参数

指定可选的逗号分隔对名称,值参数。名字是参数名和吗价值是对应的值。名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数,如Name1, Value1,…,的家

例子:fds = fileDatastore(“C: \ dir \数据”,“FileExtensions”{“开头”、“.extx”})

子文件夹包含标志,指定为由“IncludeSubfolders”真正的、0或1。指定真正的包含每个文件夹或文件夹中的所有文件和子文件夹只包含每个文件夹中的文件。

如果不指定“IncludeSubfolders”,则默认值为

例子:“IncludeSubfolders”,真的

数据类型:逻辑|

自定义格式文件扩展名,指定为由逗号分隔的对“FileExtensions”以及字符向量、字符向量的单元数组、字符串标量或字符串数组。

指定文件扩展名时fileDatastore函数仅为具有指定扩展名的文件创建数据存储对象。您还可以通过指定,为没有任何扩展名的文件创建数据存储“FileExtensions”作为一个空字符向量,。如果不指定“FileExtensions”,然后fileDatastore自动包含文件夹内的所有文件。

例子:“FileExtensions”、“

例子:“FileExtensions”、“开头”

例子:“FileExtensions”(“开头”、“.extx”)

数据类型:字符|细胞|字符串

函数预览输入数据,指定为函数句柄。

如果未指定预览功能,则FileDatastore中指定的值@ReadFcn默认为预览功能。或者,您可以为您的数据指定自己的自定义预览函数。

  • @ReadFcn(默认)-使用ReadFcn样本FileDatastore数据。此选项可能导致性能降低建设。

  • 函数处理-使用您的自定义预览功能FileDatastore构造对输入数据进行采样。使用PreviewFcn提供一个函数,该函数只读取输入数据的最少部分,用于预览和构造。

指定的函数PreviewFcn必须返回与ReadFcn的回报。

数据类型:function_handle

要读取的文件的一部分,指定为“文件”“partialfile”,或“字节”

“文件”(默认)

使用读模式“文件”当您自定义函数时,在ReadFcn,在一次读操作中读取完整的文件。

根据您的自定义读取函数,文件数据存储在每次调用时读取完整的文件。并行化的单位是一个完整的文件。

“partialfile”

使用读模式“partialfile”当您自定义文件读取函数时,在ReadFcn,每次读取操作只读取文件的一部分。

方法调用时,文件数据存储仅读取文件的一部分函数。

“partialfile”读模式下,单元并行化是一个完整的文件。多个串行操作是读取完整文件所必需的。

“字节”

使用读模式“字节”当您自定义函数时,在ReadFcn,为a。BlockSize每次读取操作时文件的大小部分。

FileDatastore将并行化单元设置为文件的一个块,该块包含由指定的字节数BlockSize

根据您的自定义读取函数,文件数据存储读取BlockSize每次调用read函数时对文件的各个部分进行大小调整。多个并行操作是读取完整文件所必需的。

要使用子集洗牌a上的函数FileDatastore对象,您必须设置“ReadMode”“文件”

数据类型:字符|字符串

要读取的字节数操作,指定为正整数。

以确保您可以分布多个块的文件跨多个并行MATLAB®工人,指定BlockSize作为大于的正整数131072个字节(128千字节)。

指定或改变的值BlockSize,你必须先设定ReadMode“字节”FileDatastore的默认值BlockSize中指定的值ReadMode

  • 如果ReadMode“文件”“partialfile”,然后FileDatastore设置默认值BlockSize

  • 如果ReadMode“字节”,然后FileDatastore设置默认值BlockSize128兆字节。

备用文件系统根路径,指定为名称-值参数,由“AlternateFileSystemRoots”字符串向量或单元格数组。使用“AlternateFileSystemRoots”在本地机器上创建数据存储,但需要在另一台机器(可能使用不同的操作系统)上访问和处理数据。此外,在使用并行计算工具箱™和MATLAB并行服务器™,并且数据存储在本地机器上,在不同的平台云或集群机器上提供数据的副本,您必须使用“AlternateFileSystemRoots”关联根路径。

  • 要关联一组彼此等价的根路径,请指定“AlternateFileSystemRoots”作为一个字符串向量。例如,

    [" Z: \数据集”、“/ mynetwork /数据集”)

  • 若要关联数据存储的多组等效根路径,请指定“AlternateFileSystemRoots”作为包含多行的单元格数组,其中每行表示一组等效根路径。将单元格数组中的每行指定为字符串向量或字符向量的单元格数组。例如:

    • 指定“AlternateFileSystemRoots”作为字符串向量的单元格数组。

      {[Z: \“数据集”、“/ mynetwork /数据集”);…[" Y: \数据集”、“/ mynetwork2 /数据集”、“年代:\数据集”)}

    • 另外,指定“AlternateFileSystemRoots”作为单元数组的单元数组的字符向量。

      {{“Z: \数据集”、“mynetwork /数据集”},…{“Y: \数据集”,“mynetwork2 /数据集”,年代:\数据集的}}

的价值“AlternateFileSystemRoots”必须满足以下条件:

  • 包含一行或多行,其中每行指定一组等效根路径。

  • 每行指定多个根路径,每个根路径必须至少包含两个字符。

  • 根路径是唯一的,并且不是彼此的子文件夹。

  • 包含至少一个指向文件位置的根路径条目。

有关更多信息,请参见设置数据存储以便在不同的机器或集群上进行处理

例子:[" Z: \数据集”、“/ mynetwork /数据集”)

数据类型:字符串|细胞

属性

全部展开

FileDatastore属性描述与。关联的文件FileDatastore对象。除了文件属性时,可以指定的值FileDatastore使用名称-值对参数的属性。要在创建对象后查看或修改属性,请使用点表示法。

包含在数据存储中的文件,解析为字符向量、字符向量的单元数组、字符串标量或字符串数组,其中每个字符向量或字符串是文件的完整路径。的位置的论点fileDatastore数据存储函数定义文件创建数据存储时。

例子:{“C: \ dir \ data \ file1.ext”;“C: \ dir \ data \ file2.ext”}

例子:“hdfs: / / /数据/ * .mat”

数据类型:字符|细胞|字符串

该属性是只读的。

用于构造数据存储的文件夹,作为字符向量的单元数组返回。单元格数组定向为列向量。每个字符向量是指向包含数据文件的文件夹的路径。的位置的论点fileDatastore数据存储函数定义文件夹创建数据存储时。

文件夹属性时重置文件a的性质FileDatastore对象。

数据类型:细胞

读取文件数据的函数,指定为函数句柄。

指定的值。@fcn的值ReadFcn财产。

例子:@MyCustomFileReader

数据类型:function_handle

该属性是只读的。

可垂直连接的标志,指定为逻辑真正的。类时指定此属性的值FileDatastore对象。

真正的

的多次读取FileDatastore对象返回可垂直拼接的统一数据。

UniformRead属性值为真正的

  • ReadFcn函数必须返回可垂直拼接的数据;否则,readall方法返回错误。

  • 的输出的基础数据类型的输出数据类型相同ReadFcn

(默认)

的多次读取FileDatastore对象不能返回可垂直拼接的统一数据。

UniformRead属性值为

  • readall返回单元格数组。

  • 返回一个高单元格数组。

例子:fds = fileDatastore(location,"ReadFcn",@load,"UniformRead",true)

数据类型:逻辑|

该属性是只读的。

支持写入的格式列表,作为字符串的金宝app行向量返回。此属性指定使用时可能的输出格式writeall从数据存储写入输出文件。

数据类型:字符串

对象的功能

hasdata 确定是否有数据可供读取
numpartitions 数据存储分区数
分区 对数据存储分区
预览 预览数据存储中的数据子集
读取数据存储中的数据
readall 读取数据存储中的所有数据
writeall 将数据存储写入文件
重置 将数据存储重置为初始状态
变换 变换数据存储
结合 合并来自多个数据存储的数据
isPartitionable 确定数据存储是否可分区
isShuffleable 确定数据存储是否可洗牌
洗牌 Shuffle数据存储中的所有数据
子集 创建数据存储或文件集的子集

例子

全部折叠

使用FileSet对象或文件路径创建fileDatastore对象。

创建一个文件集对象。创建文件数据存储对象。

fs = matlab.io.datastore.FileSet(“airlinesmall.parquet”);fds = fileDatastore(fs,“ReadFcn”@load)
fds =带属性的FileDatastore:文件:{'…\matlab\toolbox\matlab\demos\ airlinsmall。parquet'}文件夹:{'…\matlab\toolbox\matlab\demos'} UniformRead: 0 ReadMode: 'file' BlockSize: Inf PreviewFcn: @load S金宝appupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"] ReadFcn: @load AlternateFileSystemRoots: {}

或者,您可以使用文件路径来创建您的fileDatastore对象。

fds = fileDatastore(“airlinesmall.parquet”“ReadFcn”, @load);

创建包含所有元素的数据存储.mat文件中的MATLAB®演示文件夹,指定负载函数读取文件数据。

fds = fileDatastore(fullfile(matlabroot),“工具箱”“matlab”“演示”),“ReadFcn”@load,“FileExtensions”“.mat”
fds =带属性的FileDatastore:文件:{'…\matlab\toolbox\matlab\demos\accidents.mat';’……\ matlab \ matlab工具箱\ \ demo \ airfoil.mat”;“……\ matlab \ matlab工具箱\ \ demo \ airlineResults。垫”……和38个}文件夹:{'…\matlab\toolbox\matlab\demos'} UniformRead: 0 ReadMode: 'file' BlockSize: Inf PreviewFcn: @load S金宝appupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"] ReadFcn: @load AlternateFileSystemRoots: {}

读取数据存储中的第一个文件,然后读取第二个文件。

Data1 = read(fds);Data2 = read(fds);

同时读取数据存储中的所有文件。

readall (fds);

初始化一个单元格数组来保存数据和计数器

datarray = cell(numel(fds.Files), 1);I = 1;

将数据存储重置为第一个文件,并一次读取一个文件,直到没有数据剩余。将数据分配给数组dataarray

重置(fds);Hasdata (fds) dataarray{i} = read(fds);I = I +1;结束

您可以创建一个数据存储,以便从不一定适合内存的大型mat文件中读取数据。假设大型mat文件中的每个数组都适合可用内存,创建一个数据存储来分三步读取和处理数据:

  1. 编写一个自定义读取函数,每次从mat文件中读取一个数组。

  2. 设置数据存储函数的参数以执行部分读取。

  3. 每次从mat文件中读取一个数组。

编写一个自定义函数,每次从MAT-file中读取一个数组。中描述的函数必须具有签名@ReadFcn的观点FileDatastore。将此文件保存在您的工作文件夹或MATLAB路径上的文件夹中。对于本例,是一个自定义函数load_variable包含在这里。

类型load_variable.m
函数[data,variables,done] = load_variable(filename,variables) %如果变量列表为空,%从文件中创建变量列表如果变量列表为空(变量)变量= who('-file', filename);data = Load (filename, variables{1});%从变量列表中删除新读取的变量(1)= [];如果该文件已完成读取,则转到下一个文件。Done = isempty(变量);结束

创建和设置FileDatastore包含accidents.mat。指定要使用的数据存储参数“partialfile”为读模式和load_variable作为自定义读取功能。

fds = fileDatastore(“accidents.mat”“ReadMode”“partialfile”“ReadFcn”, @load_variable);

使用数据存储从文件中读取前三个变量。该文件accidents.mat包含9个变量,每次调用返回一个变量。因此,要获取前三个变量,需要三次调用read函数。

Data = read(fds)
data =带有字段的结构体:数据源:{3x1 cell}
Data = read(fds)
data =带有字段的结构体:hwycols: 17
Data = read(fds)
data =带有字段的结构体:Hwydata: [51x17 double]

注意,样例文件accidents.mat很小,适合内存,但是对于不适合内存的大型mat文件,您可以期望得到类似的结果。

提示

  • 要使用子集洗牌a上的函数FileDatastore对象,您必须设置“ReadMode”“文件”

在R2016a中引入