Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

matlab.io.datastore.BlockedFileSet

包含文件中的一组文件块的分块文件集

说明

matlab.io.datastore.BlockedFileSet 对象可帮助您在以迭代方式遍历文件时处理文件中的大量分块。可将 BlockedFileSet 对象和 DsFileReader 对象结合使用,来管理和读取数据存储中的文件。

创建对象

说明

bs = matlab.io.datastore.BlockedFileSet(location) 根据指定的位置为文件中的大量分块创建一个 BlockedFileSet 对象。

示例

bs = matlab.io.datastore.BlockedFileSet(location,Name,Value) 指定文件扩展名、子文件夹或设置对象属性。您可以指定多个名称-值对组。用引号将名称括起来。

输入参数

全部展开

要包括在 BlockedFileSet 对象中的文件或文件夹,指定为字符向量、字符向量元胞数组、字符串数组或结构体。如果这些文件不在当前文件夹中,则 location 必须是完整或相对路径。指定文件夹的子文件夹中的文件不会自动包括在 BlockedFileSet 对象中。

通常,对于 Hadoop® 工作流来说,如果您将 location 指定为结构体,则它必须包含 FileNameOffsetSize 字段。此要求使您可以将 location 参数直接用于 matlab.io.datastore.HadoopLocationBased 类的 initializeDatastore 方法。有关示例,请参阅Add Support for Hadoop

指定 location 时可以使用通配符 (*)。指定此字符会将所有匹配的文件或者匹配文件夹中的所有文件都包括在文件集对象中。

如果文件在本地不可用,则文件或文件夹的完整路径必须为统一资源定位器 (URL),例如
hdfs://hostname:portnumber/path_to_file

数据类型: char | cell | string | struct

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: bs = matlab.io.datastore.BlockedFileSet(location,'IncludeSubfolders',true)

文件扩展名,指定为字符向量、字符向量元胞数组或字符串数组。可以使用空引号 '' 表示不带扩展名的文件。

如果未指定 'FileExtensions',则 BlockedFileSet 自动包含所有文件扩展名。

示例: 'FileExtensions','.jpg'

示例: 'FileExtensions',{'.txt','.csv'}

子文件夹包含标志,指定为数值或逻辑值 1 (true) 或 0 (false)。指定 true 可包含每个文件夹中的所有文件和子文件夹,指定 false 则仅包含每个文件夹中的文件。

示例: 'IncludeSubfolders',true

属性

全部展开

用于分割文件信息的分块大小(以字节为单位),指定为下列值之一:

  • 'file' - 使用集合中下一个文件的大小。

  • 数值标量 - 使用指定的值(以字节为单位)。

示例: 'BlockSize',2000

备用文件系统根路径,指定为字符串数组或元胞数组。当您在本地计算机上创建数据存储,但需要访问和处理另一台计算机(可能是不同操作系统)上的数据时,请使用 'AlternateFileSystemRoots'。此外,如果您使用 Parallel Computing Toolbox™ 和 MATLAB® Parallel Server™ 处理数据,而数据存储在本地计算机上并且在不同平台云或集群计算机上存储数据副本,则必须使用 'AlternateFileSystemRoots' 关联根路径。

  • 要关联一组等效的根路径,请将 'AlternateFileSystemRoots' 指定为字符串数组。例如,

    ["Z:\datasets","/mynetwork/datasets"]

  • 要将在数据存储方面等效的多组根路径关联起来,请将 'AlternateFileSystemRoots' 指定为包含多个行的元胞数组,其中每一行代表一组等效的根路径。将元胞数组中的每一行指定为一个字符串数组或字符向量元胞数组。例如:

    • 'AlternateFileSystemRoots' 指定为字符串数组构成的元胞数组。

      {["Z:\datasets", "/mynetwork/datasets"];...
       ["Y:\datasets", "/mynetwork2/datasets","S:\datasets"]}

    • 也可以将 'AlternateFileSystemRoots' 指定为字符向量元胞数组。

      {{'Z:\datasets','/mynetwork/datasets'};...
       {'Y:\datasets', '/mynetwork2/datasets','S:\datasets'}}

'AlternateFileSystemRoots' 的值必须满足以下条件:

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

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

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

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

有关详细信息,请参阅Set Up Datastore for Processing on Different Machines or Clusters

示例: ["Z:\datasets","/mynetwork/datasets"]

数据类型: string | cell

此属性为只读

分块文件集对象中的分块数,指定为数值标量。

示例: bs.NumBlocks

数据类型: double

此属性为只读

BlockedFileSet 对象读取的分块数,指定为数值标量。

示例: bs.NumBlocksRead

数据类型: double

此属性为只读

有关 BlockedFileSet 对象中分块的信息,以 BlockInfo 对象形式返回,具有以下属性:

  • Filename - BlockedFileSet 对象中文件的名称。该名称包含文件的完整路径。

  • FileSize - 文件的大小(以字节为单位)。

  • Offset - 要读取的文件内的起始偏移量。

  • BlockSize - 分块的大小(以字节为单位)。

如需有关特定分块的信息,请指定分块索引。例如,bs.BlockInfo(2) 返回第二个分块的信息。如果您在没有指定索引的情况下调用 bs.BlockInfo,它将返回所有分块的信息。

示例: bs.BlockInfo(2)

对象函数

hasPreviousBlock确定分块文件集是否有上一个分块
previousblock 关于分块文件集中上一个分块的信息
hasNextBlock确定分块文件集是否有其他分块
nextblock 有关分块文件集中下一个分块的信息
progress 确定已读取多少分块或文件
maxpartitions 最大分区数
partition 划分文件集对象
subset创建数据存储或文件集的子集
reset 重置文件集对象

示例

全部折叠

创建分块文件集,并查询分块文件集中特定分块的信息。

为一组文件创建一个分块文件集 bs,并指定分块大小。

folder = {'accidents.mat','airlineResults.mat','census.mat','earth.mat'}
folder = 1x4 cell
  Columns 1 through 3

    {'accidents.mat'}    {'airlineResults...'}    {'census.mat'}

  Column 4

    {'earth.mat'}

bs = matlab.io.datastore.BlockedFileSet(folder,'BlockSize',2000)
bs = 
  BlockedFileSet with properties:

                   NumBlocks: 98
               NumBlocksRead: 0
                   BlockSize: 2000
                   BlockInfo: Show BlockInfo for all 98 blocks
    AlternateFileSystemRoots: {}

使用 nextblock 函数或通过查询 BlockInfo 属性并指定索引来获取特定分块的信息。使用 nextblock 获取连续分块的信息。例如,获取分块文件集中前两个分块的信息。

blk1 = nextblock(bs)
blk1 = 
  1x1 BlockInfo
                                       Filename                                       FileSize    Offset    BlockSize
    ______________________________________________________________________________    ________    ______    _________

    "/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/matlab/demos/accidents.mat"      7343        0         2000   

blk2 = nextblock(bs)
blk2 = 
  1x1 BlockInfo
                                       Filename                                       FileSize    Offset    BlockSize
    ______________________________________________________________________________    ________    ______    _________

    "/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/matlab/demos/accidents.mat"      7343       2000       2000   

查询 BlockInfo 属性,获取有关分块文件集中最后一个分块的信息。

lastblk = bs.BlockInfo(98)
lastblk = 
  1x1 BlockInfo
                                     Filename                                     FileSize    Offset    BlockSize
    __________________________________________________________________________    ________    ______    _________

    "/mathworks/devel/bat/Bdoc21a/build/matlab/toolbox/matlab/demos/earth.mat"     32522      32000        522   

在 R2020a 中推出