Main Content

KeyValueDatastore

用于 mapreduce 的键-值对组数据的数据存储

说明

KeyValueDatastore 对象与包含作为 mapreduce 输出或输入的键-值对组数据的文件关联。使用 KeyValueDatastore 属性指定如何访问数据。使用圆点表示法查看或修改 KeyValueDatastore 对象的特定属性:

ds = datastore("mapredout.mat");
ds.ReadSize = 20;

在使用 datastore 函数创建数据存储时,还可以使用名称-值参量指定 KeyValueDatastore 属性的值:

ds = datastore("mapredout.mat","ReadSize",20);

创建对象

使用 datastore 函数创建 KeyValueDatastore 对象。

属性

全部展开

数据存储中包含的文件,指定为 n×1 字符向量元胞数组或字符串数组,其中每个字符向量或字符串表示文件的一个完整路径。这些是由 datastore 函数的 location 参量定义的文件。location 参量包含本地文件系统、网络文件系统或支持的远程位置(例如 Amazon S3™、Windows Azure® Blob 存储和 HDFS™)上文件的完整路径。有关详细信息,请参阅处理远程数据

这些文件必须是 mapreduce 函数生成的 MAT 文件或序列文件。

示例: ["C:\dir\data\file1.mat";"C:\dir\data\file2.mat"]

示例: ["s3://bucketname/path_to_files/your_file01.mat";"s3://bucketname/path_to_files/your_file02.mat"]

数据类型: cell | string

文件类型,指定为 "mat"(对于 MAT 文件)或 "seq"(对于序列文件)。默认情况下,针对 Hadoop® 运行的 mapreduce 的输出是一个包含序列文件的数据存储。默认情况下,所有其他 mapreduce 运算的输出是一个包含 MAT 文件的数据存储。

数据类型: cell | string

在对 readpreview 函数的调用中要读取的键-值对组的最大数量,指定为正整数。

备用文件系统根路径,以名称-值参量形式指定,其中包含 "AlternateFileSystemRoots" 和一个字符串向量或元胞数组。当您在本地计算机上创建数据存储,但需要访问和处理另一台计算机(可能是不同操作系统)上的数据时,请使用 "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

对象函数

hasdata确定是否有数据可读取
numpartitions数据存储分区数
partition划分数据存储
preview预览数据存储中的数据子集
read读取数据存储中的数据
readall读取数据存储中的所有数据
reset将数据存储重置为初始状态
transform变换数据存储
combine合并来自多个数据存储的数据
isPartitionable确定数据存储是否可分区
isSubsettableDetermine whether datastore is subsettable
isShuffleable确定数据存储是否可乱序

示例

全部折叠

根据示例文件 mapredout.matmapreduce 函数的输出文件)创建一个数据存储。

fs = matlab.io.datastore.FileSet("mapredout.mat");
ds = datastore(fs,"type","keyvalue")
ds = KeyValueDatastore with properties:
                       Files: {
                              '...\matlab\toolbox\matlab\demos\mapredout.mat'
                              }
                    ReadSize: 1 key-value pairs
                    FileType: 'mat'
    AlternateFileSystemRoots: {}

ReadSize 属性设置为 8,使每次调用 read 最多读取 8 个键-值对组。

ds.ReadSize = 8
ds = KeyValueDatastore with properties:
                       Files: {
                              '...\matlab\toolbox\matlab\demos\mapredout.mat'
                              }
                    ReadSize: 8 key-value pairs
                    FileType: 'mat'
    AlternateFileSystemRoots: {}

while 循环中使用 read 函数一次读取 8 个键-值对组。该循环会一直执行,直到没有更多数据可供读取为止,并且 hasdata(ds) 返回 false

while hasdata(ds)
    T = read(ds);
end

显示读取的最后一个键-值对组。

T
T=5×2 table
     Key       Value  
    ______    ________

    {'OO'}    {[3090]}
    {'TZ'}    {[ 216]}
    {'XE'}    {[2357]}
    {'9E'}    {[ 521]}
    {'YV'}    {[ 849]}

局限性

  • KeyValueDatastore 不支持在 R2013b 中写入的序列文件。请使用 R2014a 和 R2018a 之间的 MATLAB 版本重写这些序列文件。

版本历史记录

在 R2014b 中推出