parquetwrite
将列数据写入 Parquet 文件
说明
示例
将表或时间表写入 Parquet 文件
将表格数据写入 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 文件
创建嵌套数据并将其写入 Parquet 文件。
创建一个包含一个嵌套数据层的表。
FirstName = ["Akane"; "Omar"; "Maria"]; LastName = ["Saito"; "Ali"; "Silva"]; Names = table(FirstName,LastName); NumCourse = [5; 3; 6]; Courses = {["Calculus I"; "U.S. History"; "English Literature"; "Studio Art"; "Organic Chemistry II"]; ["U.S. History"; "Art History"; "Philosphy"]; ["Calculus II"; "Philosphy II"; "Ballet"; "Music Theory"; "Organic Chemistry I"; "English Literature"]}; data = table(Names,NumCourse,Courses)
data=3×3 table
Names NumCourse Courses
_____________________ _________ ____________
FirstName LastName
_________ ________
"Akane" "Saito" 5 {5x1 string}
"Omar" "Ali" 3 {3x1 string}
"Maria" "Silva" 6 {6x1 string}
将嵌套数据写入 Parquet 文件。
parquetwrite("StudentCourseLoads.parq",data)
读取该嵌套的 Parquet 数据。
t2 = parquetread("StudentCourseLoads.parq")
t2=3×3 table
Names NumCourse Courses
_____________________ _________ ____________
FirstName LastName
_________ ________
"Akane" "Saito" 5 {5x1 string}
"Omar" "Ali" 3 {3x1 string}
"Maria" "Silva" 6 {6x1 string}
输入参数
filename
— 输出 Parquet 文件的名称
字符向量 | 字符串标量
输出 Parquet 文件的名称,指定为字符向量或字符串标量。
根据您写入的位置,filename
可以采用以下形式之一。
位置 | 形式 | ||||||||
---|---|---|---|---|---|---|---|---|---|
当前文件夹 | 要写入当前文件夹,请在 示例: | ||||||||
其他文件夹 | 要写入不同于当前文件夹的文件夹,请在 示例: 示例: | ||||||||
远程位置 | 要写入远程位置,
根据远程位置,
有关详细信息,请参阅处理远程数据。 示例: |
数据类型: char
| string
T
— 输入数据
表 | 时间表
输入数据,指定为表或时间表。
使用 parquetwrite
导出结构化 Parquet 数据。有关支持写入的 Parquet 数据类型的详细信息,请参阅 Apache Parquet Data Type Mappings。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: parquetwrite(filename,T,'VariableCompression','gzip','Version','1.0')
VariableCompression
— 压缩方案名称
'snappy'
(默认) | 'brotli'
| 'gzip'
| 'uncompressed'
| 字符向量元胞数组 | 字符串向量
压缩方案名称,指定为下列值之一:
'snappy'
、'brotli'
、'gzip'
或'uncompressed'
。如果您指定一种压缩算法,则parquetwrite
使用相同的算法压缩所有变量。您也可以指定字符向量元胞数组或字符串向量,其中包含用于每个变量的压缩算法的名称。
通常,'snappy'
的读写性能更好,'gzip'
压缩率更高,但 CPU 处理时间更长;'brotli'
通常压缩速度慢,但生成的文件大小最小。
示例: parquetwrite('myData.parquet', T, 'VariableCompression', 'brotli')
示例: parquetwrite('myData.parquet', T, 'VariableCompression', {'brotli' 'snappy' 'gzip'})
VariableEncoding
— 编码方案名称
'auto'
(默认) | 'dictionary'
| 'plain'
| 字符向量元胞数组 | 字符串向量
编码方案名称,指定为下列值之一:
'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'})
RowGroupHeights
— 每个输出行组要写入的行数
非负数值标量 | 由非负整数组成的向量
每个输出行组要写入的行数,指定为非负数值标量或非负整数向量。
如果指定标量,标量值将设置输出 Parquet 文件中所有行组的高度。如果该标量值不是行组数量的确切倍数,则最后一个行组包含的行可能会比较少。
如果指定向量,则向量中的每个值将设置输出 Parquet 文件中一个对应行组的高度。向量中所有值的总和必须与输入表的高度匹配。
行组是可以一次性读入内存的 Parquet 文件的最小子集。降低行组高度有助于在读取时将数据放入内存。行组高度还会影响对 Parquet 数据集执行过滤操作的性能,因为在读取时,较大的行组高度可用于过滤更多的数据。
如果未指定 RowGroupHeights
并且输入表超过 67108864 行,则输出文件中的行组数等于 floor(TotalNumberOfRows/67108864)+1
。
示例: RowGroupHeights=100
示例: RowGroupHeights=[300, 400, 500, 0, 268]
Version
— 要使用的 Parquet 版本
'2.0'
(默认) | '1.0'
要使用的 Parquet 版本,指定为 '1.0'
或 '2.0'
。默认情况下,'2.0'
提供最高效的存储,但您可以选择 '1.0'
以获得与支持 Parquet 格式的外部应用程序的最广泛兼容性。
小心
Parquet 版本 1.0 有一项限制,即它无法对 uint32
类型的变量进行来回处理(这些变量以 int64
形式读回到 MATLAB® 中)。
局限性
在某些情况下,parquetwrite
创建的文件并不能准确表示原始数组 T
。如果使用 parquetread
或 datastore
来读取文件,则结果可能与原始表的格式或内容不完全相同。有关详细信息,请参阅Apache Parquet Data Type Mappings。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2019a 中推出R2022b: 将嵌套数据写入 Parquet 文件
使用 parquetwrite
将嵌套的表和时间表变量写入 Parquet 文件。
R2022b: 在基于线程的环境中使用函数
此函数支持基于线程的环境。
R2022a: 确定和定义 Parquet 文件数据中的行组
Parquet 文件可以将一定范围的行存储为一个不同的行组,以提高粒度和进行有针对性的分析。parquetread
在读取 Parquet 文件数据时使用 RowGroups
名称-值参量来确定行组。parquetwrite
在写入 Parquet 文件数据时使用 RowGroupHeights
名称-值参量来定义行组。
R2022a: 导出嵌套数据
现在,您可以将嵌套元胞数组导出为 LIST 数组。
R2021b: 使用原始时区读取和写入日期时间
Parquet 文件要求时区感知时间戳采用 UTC 时区。当写入日期时间时,parquetwrite
将它们转换为等效的 UTC 值,并将原始时区值存储在 Parquet 文件的元数据中。parquetread
使用存储的原始时区值来启用往复。
R2021a: 使用 Parquet 数据格式的分类数据
写入包含 categorical
数据类型的 Parquet 数据。
R2020a: 写入文件时控制编码方案和 Parquet 版本
parquetwrite
函数包含两个新的名称-值参量:
'VariableEncoding'
控制 Parquet 文件是对每个变量使用普通编码还是字典编码。'Version'
指定是使用 Parquet 1.0 还是 Parquet 2.0 文件格式。
R2019b: 编写包含任意字符的表格数据
写入含有变量名称的表格数据(这些变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符)。要写入包含任意变量名称(如包含空格和非 ASCII 字符的变量名称)的表格数据,请将 PreserveVariableNames
参数设置为 true
。
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)