Main Content

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

parquetwrite

将列数据写入 Parquet 文件

说明

示例

parquetwrite(filename,T) 将表或时间表 T 写入具有 filename 所指定文件名的 Parquet 2.0 文件。

示例

parquetwrite(filename,T,Name,Value) 使用一个或多个名称-值对组参数指定其他选项。例如,您可以指定 'VariableCompression' 来更改所使用的压缩算法,或指定 'Version' 来将数据写入 Parquet 1.0 文件。

示例

全部折叠

将表格数据写入 Parquet 文件中,并比较同样的表格数据采用 .csv.parquet 文件格式时的大小。

将文件 outages.csv 中的表格数据读入表中。

T = readtable('outages.csv');

将数据写入 Parquet 文件格式。默认情况下,parquetwrite 函数使用 Snappy 压缩方案。要指定其他压缩方案,请参阅 'VariableCompression' 名称-值对组。

parquetwrite('outagesDefault.parquet',T)

获取文件大小,并计算同样的表格数据采用 .csv 格式和 .parquet 格式时的大小之比。

获取 .csv 文件的大小。

fcsv = dir(which('outages.csv'));
size_csv = fcsv.bytes
size_csv = 101040

获取 .parquet 文件的大小。

fparquet  = dir('outagesDefault.parquet');
size_parquet = fparquet.bytes
size_parquet = 44881

计算比率。

sizeRatio = ( size_parquet/size_csv )*100 ;
disp(['Size Ratio = ', num2str(sizeRatio) '% of original size'])
Size Ratio = 44.419% of original size

输入参数

全部折叠

输出 Parquet 文件的名称,指定为字符向量或字符串标量。

根据您写入的位置,filename 可以采用以下形式之一。

位置

形式

当前文件夹

要写入当前文件夹,请在 filename 中指定文件名。

示例:'myData.parquet'

其他文件夹

要写入不同于当前文件夹的文件夹,请在 filename 中指定完整或相对路径名称。

示例:'C:\myFolder\myData.parquet'

示例:'dataDir\myData.parquet'

远程位置

要写入远程位置,filename 必须包含指定为统一资源定位器 (URL) 形式的文件的完整路径:

scheme_name://path_to_file/myData.parquet

根据远程位置,scheme_name 可以是下表中的值之一。

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob Storagewasbwasbs
HDFS™hdfs

有关详细信息,请参阅处理远程数据

示例:'s3://bucketname/path_to_file/myData.parquet'

数据类型: char | string

输入数据,指定为表或时间表。

名称-值对组参数

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

示例: parquetwrite(filename,T,'VariableCompression','gzip','Version','1.0')

压缩方案名称,指定为下列值之一:

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

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

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

示例: parquetwrite('myData.parquet', T, 'VariableCompression', 'brotli')

示例: parquetwrite('myData.parquet', T, 'VariableCompression', {'brotli' 'snappy' 'gzip'})

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

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

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

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

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

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

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

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

小心

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

局限性

在某些情况下,parquetwrite 创建的文件并不能准确表示原始数组 T。如果使用 parquetreaddatastore 来读取文件,则结果可能与原始表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings

在 R2019a 中推出