主要内容

write

R2026b

将 tall 数组写入本地和远程位置以设置检查点

描述

write(location,tA) 计算 tall 数组 tA 中的值,并将该数组写入 location 指定的文件夹中的文件。数据以高效的二进制格式存储,适合使用 datastore(location) 读回。

示例

write(filepattern,tA) 使用 filepattern 中的文件扩展名来确定输出格式。filepattern 必须包含要写入文件的文件夹,后跟包含通配符 * 的文件名。通配符表示递增编号,用于生成唯一文件名。例如,write('folder/myfile_*.csv',tA)。

示例

write(___,Name,Value) 支持任何上述语法,且可使用一个或多个名称-值对组参量指定其他选项。例如,您可以使用 'FileType' 指定文件类型,并指定有效的文件类型('mat'、'seq'、'parquet'、'text' 或 'spreadsheet'),您也可以使用 'WriteFcn' 和函数句柄指定自定义写函数来处理数据。

示例

示例

全部折叠

将 tall 数组写入磁盘,然后通过为写入的文件创建新数据存储来恢复该 tall 数组。此过程对于保存您的工作或与同事共享 tall 数组非常有用。

为 airlinesmall.csv 数据集创建数据存储。仅选择 Year、Month 和 UniqueCarrier 变量,并将 'NA' 值视为缺失数据。将数据存储转换为 tall 表。

ds = datastore('airlinesmall.csv');
ds.TreatAsMissing = 'NA';
ds.SelectedVariableNames = {'Month','Year','UniqueCarrier'};
tt = tall(ds)
tt =

  M×3 tall table

    Month    Year    UniqueCarrier
    _____    ____    _____________

     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
     10      1987       {'PS'}    
      :       :            :
      :       :            :

按照年的降序对数据排序,然后提取前 25 行。生成的 tall 表是未经计算的。

tt_new = topkrows(tt,25,'Year')
tt_new =

  M×3 tall table

    Month    Year    UniqueCarrier
    _____    ____    _____________

      ?       ?            ?      
      ?       ?            ?      
      ?       ?            ?      
      :       :            :
      :       :            :

Preview deferred. Learn more.

将结果保存到 C:\ 盘上名为 ExampleData 的新文件夹。(您可以指定不同的写入位置,特别是当您使用的不是 Windows® 计算机时。)write 函数在写入文件前计算 tall 数组,因此无需在保存数据前使用 gather 函数。

location = 'C:\ExampleData';
write(location,tt_new)
Writing tall data to folder C:\ExampleData
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.25 sec
Evaluation completed in 0.65 sec

从工作目录中清除 tt 和 ds。要恢复已写入磁盘的 tall 表,请先创建引用相同目录的新数据存储。然后将该数据存储转换为 tall 表。由于在将 tall 表写入磁盘前已对其进行计算,因此显示中现在包含值的预览。

clear tt ds
ds2 = datastore(location);
tt2 = tall(ds2)
tt2 =

  M×3 tall table

    Month    Year    UniqueCarrier
    _____    ____    _____________

      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      1      2008       {'WN'}    
      :       :            :
      :       :            :

创建一个引用 tsunamis.xlsx 数据文件的 tall 表,其中包含有关海啸的位置、量级和原因的时间戳数据。

ds = spreadsheetDatastore('tsunamis.xlsx');
T = tall(ds)
T =

  M×20 tall table

    Latitude    Longitude    Year    Month    Day    Hour    Minute    Second    ValidityCode            Validity             CauseCode          Cause           EarthquakeMagnitude          Country                   Location             MaxHeight    IidaMagnitude    Intensity    NumDeaths    DescDeaths
    ________    _________    ____    _____    ___    ____    ______    ______    ____________    _________________________    _________    __________________    ___________________    ___________________    __________________________    _________    _____________    _________    _________    __________

      -3.8        128.3      1950     10       8       3       23       NaN           2          {'questionable tsunami' }        1        {'Earthquake'    }            7.6            {'INDONESIA'      }    {'JAVA TRENCH, INDONESIA'}       2.8            1.5            1.5          NaN          NaN    
      19.5         -156      1951      8      21      10       57       NaN           4          {'definite tsunami'     }        1        {'Earthquake'    }            6.9            {'USA'            }    {'HAWAII'                }       3.6            1.8            NaN          NaN          NaN    
     -9.02       157.95      1951     12      22     NaN      NaN       NaN           2          {'questionable tsunami' }        6        {'Volcano'       }            NaN            {'SOLOMON ISLANDS'}    {'KAVACHI'               }         6            2.6            NaN          NaN          NaN    
     42.15       143.85      1952      3       4       1       22        41           4          {'definite tsunami'     }        1        {'Earthquake'    }            8.1            {'JAPAN'          }    {'SE. HOKKAIDO ISLAND'   }       6.5            2.7              2           33            1    
      19.1         -155      1952      3      17       3       58       NaN           4          {'definite tsunami'     }        1        {'Earthquake'    }            4.5            {'USA'            }    {'HAWAII'                }         1            NaN            NaN          NaN          NaN    
      43.1        -82.4      1952      5       6     NaN      NaN       NaN           1          {'very doubtful tsunami'}        9        {'Meteorological'}            NaN            {'USA'            }    {'LAKE HURON, MI'        }      1.52            NaN            NaN          NaN          NaN    
     52.75        159.5      1952     11       4      16       58       NaN           4          {'definite tsunami'     }        1        {'Earthquake'    }              9            {'RUSSIA'         }    {'KAMCHATKA'             }        18            4.2              4         2236            3    
        50        156.5      1953      3      18     NaN      NaN       NaN           3          {'probable tsunami'     }        1        {'Earthquake'    }            5.8            {'RUSSIA'         }    {'N. KURIL ISLANDS'      }       1.5            0.6            NaN          NaN          NaN    
       :            :         :        :       :      :        :         :            :                      :                    :                :                      :                      :                         :                     :              :              :            :            :
       :            :         :        :       :      :        :         :            :                      :                    :                :                      :                      :                         :                     :              :              :            :            :

将 Year、Month、Day、Hour、Minute 和 Second 变量合并为单一 datetime 变量,然后从该表中删除这些变量。删除所有包含缺失数据的行。

T.DateTime = datetime(T.Year, T.Month, T.Day, T.Hour, T.Minute, T.Second);
T(:,3:8) = [];
TT = rmmissing(T)
TT =

  M×15 tall table

    Latitude    Longitude    ValidityCode          Validity          CauseCode               Cause                EarthquakeMagnitude       Country                 Location              MaxHeight    IidaMagnitude    Intensity    NumDeaths    DescDeaths          DateTime      
    ________    _________    ____________    ____________________    _________    ____________________________    ___________________    _____________    ____________________________    _________    _____________    _________    _________    __________    ____________________

     42.15        143.85          4          {'definite tsunami'}        1        {'Earthquake'              }            8.1            {'JAPAN'    }    {'SE. HOKKAIDO ISLAND'     }        6.5           2.7              2           33           1         04-Mar-1952 01:22:41
     58.34       -136.52          4          {'definite tsunami'}        3        {'Earthquake and Landslide'}            8.3            {'USA'      }    {'SE. ALASKA, AK'          }     524.26           4.6              5            5           1         10-Jul-1958 06:15:53
     -39.5         -74.5          4          {'definite tsunami'}        1        {'Earthquake'              }            9.5            {'CHILE'    }    {'CENTRAL CHILE'           }         25           4.6              4         1260           3         22-May-1960 19:11:17
      -6.8         -80.7          4          {'definite tsunami'}        1        {'Earthquake'              }            6.8            {'PERU'     }    {'PERU'                    }          9           3.2            2.5           66           2         20-Nov-1960 22:01:56
      61.1        -147.5          4          {'definite tsunami'}        3        {'Earthquake and Landslide'}            9.2            {'USA'      }    {'PRINCE WILLIAM SOUND, AK'}         67           6.1              5          221           3         28-Mar-1964 03:36:14
     38.65         139.2          4          {'definite tsunami'}        1        {'Earthquake'              }            7.5            {'JAPAN'    }    {'NW. HONSHU ISLAND'       }        5.8           2.7              2           26           1         16-Jun-1964 04:01:44
       0.2         119.8          4          {'definite tsunami'}        1        {'Earthquake'              }            7.8            {'INDONESIA'}    {'BANDA SEA'               }         10           3.3              3          200           3         14-Aug-1968 22:14:19
      -3.1         118.9          4          {'definite tsunami'}        1        {'Earthquake'              }            6.9            {'INDONESIA'}    {'MAKASSAR STRAIT'         }          4             2              2          600           3         23-Feb-1969 00:36:56
       :            :             :                   :                  :                     :                           :                   :                       :                      :              :              :            :            :                  :
       :            :             :                   :                  :                     :                           :                   :                       :                      :              :              :            :            :                  :

将表作为电子表格文件写入 Amazon S3™ 存储中的一个远程位置。要在 Amazon S3 中读取或写入数据,必须使用您帐户的凭据设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量。有关详细信息,请参阅处理远程数据。

setenv('AWS_ACCESS_KEY_ID', 'YOUR_AWS_ACCESS_KEY_ID'); 
setenv('AWS_SECRET_ACCESS_KEY', 'YOUR_AWS_SECRET_ACCESS_KEY'); 

location = 's3://bucketname/preprocessedData/';
write(location, TT, 'FileType', 'spreadsheet')

要读回数据,请使用 datastore 指向数据现在所在的远程位置。

ds = datastore(location);
tt = tall(ds);

创建并使用一个自定义写函数,以 write 不直接支持的其他格式(如图像文件)写入数据。

创建一个引用当前示例文件夹中所有示例图像的图像数据存储。所选图像的扩展名为 .jpg、.tif 和 .png。将数据存储转换为 tall 元胞数组。

currentFolder = pwd;
ds = imageDatastore(currentFolder,FileExtensions=[".jpg" ".tif" ".png"]);
T = tall(ds);

将其中一个图像存入内存并显示它。

I = gather(T(1));
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 0.71 sec
Evaluation completed in 0.98 sec
imshow(I{1})

Figure contains an axes object. The hidden axes object contains an object of type image.

write 不直接支持图像文件,因此要以不同格式写入图像,您必须创建新函数来处理文件写入。写函数从 write: 接收两个输入

  • info 是一个结构体,其中包含有关当前数据块信息的字段。您可以使用这些字段构造自己的唯一文件名,或者只使用 SuggestedFilename 字段来使用 write 建议的名称。

  • data 是当前数据块,通过对数据存储使用 read 获得。

函数 imageWriter 使用 write 建议的文件名,并使用 imwrite 将图像文件作为 .jpg 文件写入磁盘。将此函数保存在当前工作文件夹中。

type imageWriter
function imageWriter(info, data)
  filename = info.SuggestedFilename;
  imwrite(data{:}, filename)
end

将数据存储中的图像写入 C:\ 磁盘上名为 exampleImages 的新文件夹。(您可以使用其他位置,尤其是在您不使用 Windows® 计算机的情况下。)使用 WriteFcn 名称-值对组参量将 imageWriter 作为自定义写函数传递。

location = "C:\exampleImages\image_*.jpg";
write(location,T,WriteFcn=@imageWriter)
Writing tall data to folder C:\exampleImages
Evaluating tall expression using the Parallel Pool 'Processes':
- Pass 1 of 1: Completed in 0.59 sec
Evaluation completed in 1.5 sec

显示写入文件的文件夹的内容。

dir C:\exampleImages
.                   ..                  image_1_000001.jpg  image_2_000001.jpg  

要将图像读回 MATLAB® 中,请创建引用相同位置的数据存储。

ds = imageDatastore(location);
T = tall(ds)
T =

  2×1 tall cell array

    {1024×2048×3 uint8}
    {1024×2048×3 uint8}

输入参数

全部折叠

要写入数据的文件夹位置,指定为字符向量或字符串。location 可以指定完整或相对路径。指定的文件夹可以是以下选项之一:

  • 现有的空文件夹

  • write 创建的新文件夹

您可以将数据写入计算机上的本地文件夹、远程网络上的文件夹,或写入 HDFS™、Azure® 或 Amazon S3™ 中的远程位置。有关在远程位置读取和写入数据的详细信息,请参阅处理远程数据。

对于 Hadoop® 和 Apache® Spark™,还有额外的注意事项:

  • 如果文件夹在本地不可用,则文件夹的完整路径必须为以下形式的统一资源定位器 (URL):
    hdfs:///path_to_file。

  • 在写入 HDFS 之前,将 HADOOP_HOME、HADOOP_PREFIX 或 MATLAB_HADOOP_INSTALL 环境变量设置为 Hadoop 的安装文件夹。

  • 在写入 Apache Spark 之前,将 SPARK_HOME 环境变量设置为 Apache Spark 的安装文件夹。

示例: location = 'hdfs:///some/output/folder' 指定 HDFS URL。

示例: location = '../../dir/data' 指定相对文件路径。

示例: location = 'C:\Users\MyName\Desktop\data' 指定 Windows® 桌面文件夹的绝对路径。

示例: location = 'file:///path/to/data' 指定文件夹的绝对 URI 路径。

数据类型: char | string

输入数组,指定为 tall 数组。

文件命名模式,指定为字符串或字符向量。文件命名模式必须包含要在其中写入文件的文件夹,后跟包含通配符 * 的文件名。write 函数将通配符替换为序列数字,以确保文件名的唯一性。

示例: write('folder/data_*.txt',tA) 将 tall 数组 tA 作为一系列 .txt 文件写入 folder,文件名为 data_1.txt、data_2.txt,依此类推。

数据类型: char | string

名称-值参数

全部展开

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: write('C:\myData', tX, 'FileType', 'text', 'WriteVariableNames', false) 将 tall 数组 tX 写入 C:\myData,生成一组不使用变量名称作为列标题的文本文件。

常规选项

全部展开

文件类型,指定为以逗号分隔的对组,包含 'FileType' 和下列允许的文件类型之一:'auto'、'mat'、'parquet'、'seq'、'text' 或 'spreadsheet'。

将 'FileType' 名称-值对组与 location 参量结合使用,以指定要写入的文件类型。默认情况下,write 会尝试自动检测适当的文件类型。如果 write 可以根据 location 或 filepattern 参量中的扩展名确定文件类型,则不需要指定 'FileType' 名称-值对组参量。write 可以根据以下扩展名确定文件类型:

  • .mat 表示 MATLAB® 数据文件

  • .parquet 或 .parq 表示 Parquet 文件

  • .seq 表示序列文件

  • .txt、.dat 或 .csv(带分隔符的文本文件)

  • .xls、.xlsx、.xlsb、.xlsm、.xltx 或 .xltm 表示电子表格文件

示例: write('C:\myData', tX, 'FileType', 'text')

自定义写函数,指定为以逗号分隔的对组,其中包含 'WriteFcn' 和一个函数句柄。指定的函数从 tA 接收数据块,并负责创建输出文件。您可以使用 'WriteFcn' 名称-值对组参量写入各种格式的数据,即使 write 不直接支持输出格式。

函数签名

自定义写函数必须接受两个输入参量,即 info 和 data:

function myWriter(info, data)

  • data 包含来自 tA 的数据块。

  • info 是一个结构体,其字段包含有关数据块的信息。您可以使用这些字段构建在最终位置内具有全局唯一性的新文件名。结构体字段包括:

    字段描述
    RequiredLocation临时输出文件夹的完全限定路径。只有写入此文件夹的文件才会复制到最终目标位置。
    RequiredFilePattern输出文件名所需的文件模式。如果仅指定一个文件夹名称,则此字段为空。
    SuggestedFilename满足位置和命名要求的完全限定的全局唯一文件名。
    PartitionIndex正在写入的 tall 数组分区的索引。
    NumPartitionstall 数组中的分区总数。
    BlockIndexInPartition当前数据块在分区内的位置。
    IsFinalBlock如果当前数据块是分区的最后一个数据块,则为 true。

文件命名

用于输出文件的文件名确定 datastore 稍后读回文件的顺序。如果文件的顺序很重要,则最佳做法是使用 SuggestedFilename 字段命名文件,因为建议的名称可以保证文件顺序。如果不使用建议的文件名,则自定义写函数必须创建全局唯一且正确排序的文件名。文件名应遵循 RequiredFilePattern 中列出的命名模式。使用 Parallel Computing Toolbox™ 并行运行时,文件名必须在工作单元之间具有唯一性且正确排序,即使每个工作单元写入自己的本地文件夹也是如此。

具有多个分区的数组

您可以将一个 tall 数组划分为多个分区,以便与 Parallel Computing Toolbox 以并行方式对数组运行计算。每个分区仍然由较小的块组成,这些块会单独装入内存。

info 包含与分区相关的几个字段:PartitionIndex、NumPartitions、BlockIndexInPartition 和 IsFinalBlock。如果您是输出单个文件并向其追加内容(这对于具有已拆分为多个块的大型分区的数组而言是一项常见任务),这些字段非常有用。对每个块调用一次自定义写函数,并且一个分区中的块始终由同一个工作单元按顺序写入。但是,不同分区可以由不同工作单元写入。

示例函数

写电子表格文件的一个简单写函数是

function dataWriter(info, data)
  filename = info.SuggestedFilename;
  writetable(data, filename, 'FileType', 'spreadsheet')
end
要调用 dataWriter 作为某些数据 tt 的写函数,请使用以下命令。
tt = tall(array2table(rand(5000,3)));
location = '/tmp/MyData/tt_*.xlsx';
write(location, tt, 'WriteFcn', @dataWriter);
对于每个块,dataWriter 函数使用 info 结构体中的建议文件名,并调用 writetable 来写电子表格文件。建议的文件名会考虑在 location 参量中指定的文件命名模式。

数据类型: function_handle

文本或电子表格文件

全部展开

指示将变量名称写入为列标题的指示符,指定为逗号分隔的对组,包含 'WriteVariableNames' 和数值或逻辑值 1 (true) 或 0 (false)。

指示符

行为

true

包含变量名称作为输出的列标题。(默认值)

false

变量名称不包含在输出中。

用于写入日期的区域设置,指定为逗号分隔的对组,其中包含 'DateLocale' 和一个字符向量或字符串标量。在将 datetime 值写入文件时,请使用 DateLocale 指定 write 写入月和星期几的名称以及缩写所用的区域设置。该字符向量或字符串采用 xx_YY 形式,其中 xx 是用于指示语言的小写 ISO 639-1 双字母代码,YY 是用于指示国家/地区的大写 ISO 3166-1 alpha-2 代码。有关区域设置的常见值的列表,请参阅 datetime 函数的 Locale 名称-值对组参量。

对于 Excel® 文件,write 将以 Excel 日期格式写入包含 datetime 数组的变量并忽略 'DateLocale' 参数值。如果 datetime 变量包含 1900 或 1904 之前的年份,write 将以文本形式写入变量。有关 Excel 日期的详细信息,请参阅 Excel 中的 1900 和 1904 日期系统之间的差异。

示例: 'DateLocale','ja_JP' 或 'DateLocale',"ja_JP"

数据类型: char | string

仅限文本文件

全部展开

字段分隔符,指定为逗号分隔的对组,其中包含 'Delimiter' 和下列设定符之一。

设定符

字段分隔符

','

'comma'

逗号(默认值)

' '

'space'

空格

'\t'

'tab'

制表符

';'

'semi'

分号

'|'

'bar'

垂直条

您只能将 'Delimiter' 名称-值对组参量用于带分隔符的文本文件。

示例: 'Delimiter','space' 或 'Delimiter',"space"

用于写入带引号文本的指示符,指定为逗号分隔的对组,包含 'QuoteStrings' 和 false 或 true。如果 'QuoteStrings' 设置为 true,则 write 将文本括在双引号中,并将显示为文本一部分的任何双引号字符替换为两个双引号字符。有关示例,请参阅 将带引号文本写入 CSV 文件。

您只能将 'QuoteStrings' 名称-值对组参量用于带分隔符的文本文件。

与文件关联的字符编码方案,指定为由 'Encoding' 和 'system' 组成的逗号分隔对组,或指定为标准字符编码方案名称,如下表所示的值之一。当您不指定任何编码或将编码指定为 'system' 时,write 函数将使用您系统的默认编码写入该文件。

"Big5"

"ISO-8859-1"

"windows-874"

"Big5-HKSCS"

"ISO-8859-2"

"windows-949"

"CP949"

"ISO-8859-3"

"windows-1250"

"EUC-KR"

"ISO-8859-4"

"windows-1251"

"EUC-JP"

"ISO-8859-5"

"windows-1252"

"EUC-TW"

"ISO-8859-6"

"windows-1253"

"GB18030"

"ISO-8859-7"

"windows-1254"

"GB2312"

"ISO-8859-8"

"windows-1255"

"GBK"

"ISO-8859-9"

"windows-1256"

"IBM866"

"ISO-8859-11"

"windows-1257"

"KOI8-R"

"ISO-8859-13"

"windows-1258"

"KOI8-U"

"ISO-8859-15"

"US-ASCII"

 

"Macintosh"

"UTF-8"

 

"Shift_JIS"

 

示例: 'Encoding','system' 或 'Encoding',"system" 使用系统默认编码。

仅限电子表格文件

全部展开

目标工作表,指定为逗号分隔的对组,包含 'Sheet' 和一个包含工作表名称或正整数(指示工作表索引)的字符向量或字符串标量。工作表名称不能包含冒号 (:)。要确定电子表格文件中工作表的名称,请使用 sheets = sheetnames(filename)。有关详细信息,请参阅 sheetnames。

如果不存在工作表,write 将在工作表集合末尾添加一张新工作表。如果工作表为大于工作表张数的索引,则 write 将追加空工作表,直至工作簿中的工作表数等于工作表索引。在任一情况下,write 都将生成一条警告,指示已添加新工作表。

您只能将 'Sheet' 名称-值对组参量用于电子表格文件。

示例: 'Sheet',2

示例: 'Sheet', 'MySheetName'

数据类型: char | string | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

仅限 Parquet 文件

全部展开

Parquet 压缩算法,指定为下列值之一。

  • 'snappy'、'brotli'、'gzip' 或 'uncompressed'。如果您指定一种压缩算法,则 write 使用相同的算法压缩所有变量。

  • 您也可以指定字符向量元胞数组或字符串向量,其中包含用于每个变量的压缩算法的名称。

通常,'snappy' 的读写性能更好,'gzip' 压缩率更高,但 CPU 处理时间更长;'brotli' 通常压缩速度慢,但生成的文件大小最小。

示例: write('C:\myData', tX, 'FileType', 'parquet', 'VariableCompression', 'brotli')

示例: write('C:\myData', tX, 'FileType', 'parquet', 'VariableCompression', {'brotli' 'snappy' 'gzip'})

编码方案名称,指定为下列值之一:

  • 'auto' - write 对逻辑变量使用 'plain' 编码,对所有其他变量使用 'dictionary' 编码。

  • 'dictionary'、'plain' - 如果您指定一种编码方案,则 write 会用该方案对所有变量进行编码。

  • 您也可以指定字符向量元胞数组或字符串向量,其中包含用于每个变量的编码方案的名称。

一般情况下,使用 'dictionary' 编码后文件较小,但对于不包含许多重复值的变量,'plain' 编码更快。如果字典的大小或唯一值的数量变得太大,则编码会自动还原为普通编码。有关 Parquet 编码的详细信息,请参阅 Parquet encoding definitions。

示例: write('myData.parquet', T, 'FileType', 'parquet', 'VariableEncoding', 'plain')

示例: write('myData.parquet', T, 'FileType', 'parquet', 'VariableEncoding', {'plain' 'dictionary' 'plain'})

要使用的 Parquet 版本,指定为 '1.0' 或 '2.0'。默认情况下,'2.0' 提供最高效的存储,但您可以选择 '1.0' 以获得与支持 Parquet 格式的外部应用程序的最广泛兼容性。

小心

Parquet 版本 1.0 有一项限制,即它无法对 uint32 类型的变量进行来回处理(这些变量以 int64 形式读回到 MATLAB 中)。

限制

在某些情况下,write(location, T, 'FileType', type) 创建的文件并不能准确表示原始数组 T。如果使用 datastore(location) 来读取文件,则结果可能与原始 tall 表的格式或内容不完全相同。

  1. 对于 'text' 和 'spreadsheet' 文件类型,write 使用以下规则:

    • write 使用 longG 格式输出数值变量,并将分类、字符或字符串变量输出为不带引号的文本。

    • 对于具有多个列的非文本变量,write 在每行上输出多个以分隔符分隔的字段,并为文件的第一行构造合适的列标题。

    • write 将具有两个以上维度的变量输出为二维变量,即折叠尾部维度。

    • 对于具有数值、逻辑值、字符或分类内容的元胞值变量,write 输出到以分隔符分隔的多个字段中(每个元胞的内容作为一行)。如果元胞具有不同数据类型,write 将输出单一空字段。

    如果需要写 tall 数组的一个精确检查点,请不要使用 'text' 或 'spreadsheet' 文件类型。

  2. 对于 'parquet' 文件类型,有些情况下 Parquet 格式无法完整表示 MATLAB 表或时间表数据类型。如果使用 parquetread 或 datastore 来读取文件,则结果可能与原始 tall 表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings。

提示

  • 使用 write 函数可在您工作时创建数据的检查点或快照,尤其是处理巨型数据集时。这样可以直接基于磁盘上的文件重新构造 tall 数组,而不用重新执行生成该 tall 数组的所有命令。

扩展功能

全部展开

tall 数组
对行数太多而无法放入内存的数组进行计算。

版本历史记录

在 R2016b 中推出