Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

write

将 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 数据集创建数据存储。仅选择 YearMonthUniqueCarrier 变量,并将 '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.52 sec
Evaluation completed in 1.2 sec

从工作目录中清除 ttds。要恢复已写入磁盘的 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 =

  Mx20 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    
       :            :         :        :       :      :        :         :            :                      :                    :                :                      :                      :                         :                     :              :              :            :            :
       :            :         :        :       :      :        :         :            :                      :                    :                :                      :                      :                         :                     :              :              :            :            :

YearMonthDayHourMinuteSecond 变量合并为单一 datetime 变量,然后从该表中删除这些变量。删除所有包含缺失数据的行。

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

  Mx15 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_IDAWS_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 不直接支持的其他格式(如图像文件)写入数据。

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

demoFolder = fullfile(matlabroot,'toolbox','matlab','demos');
ds = imageDatastore(demoFolder,'FileExtensions',{'.jpg' '.tif' '.png'});
T = tall(ds);

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

I = gather(T(1));
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 3 sec
Evaluation completed in 3.2 sec
imshow(I{1},'InitialMagnification',30)

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 Local MATLAB Session:
- Pass 1 of 1: Completed in 0.71 sec
Evaluation completed in 0.98 sec

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

dir C:\exampleImages
.                   image_1_000001.jpg  image_3_000001.jpg  image_5_000001.jpg  
..                  image_2_000001.jpg  image_4_000001.jpg  image_6_000001.jpg  

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

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

  6×1 tall cell array

    {1024×2048×3 uint8}
    { 650×600×3  uint8}
    {1024×2048×3 uint8}
    { 650×600×3  uint8}
    { 480×640×3  uint8}
    { 480×640×3  uint8}

输入参数

全部折叠

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

  • 现有的空文件夹

  • write 创建的新文件夹

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

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

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

  • 在写入 HDFS 之前,将 HADOOP_HOMEHADOOP_PREFIXMATLAB_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.txtdata_2.txt,依此类推。

数据类型: char | string

名称-值对组参数

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

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

全部折叠

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

'FileType' 名称-值对组与 location 参数结合使用,以指定要写入的文件类型。默认情况下,write 会尝试自动检测适当的文件类型。如果 write 可以根据 locationfilepattern 参数中的扩展名确定文件类型,则不需要指定 '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 不直接支持输出格式。

函数签名

自定义写函数必须接受两个输入参数,即 infodata

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

示例函数

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

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'falsetrue。如果 '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 表或时间表数据类型。如果使用 parquetreaddatastore 来读取文件,则结果可能与原始 tall 表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings

提示

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

扩展功能

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

在 R2016b 中推出