parquetwrite
将列数据写入 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 文件。
创建一个包含一个嵌套数据层的表。
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 {5×1 string}
"Omar" "Ali" 3 {3×1 string}
"Maria" "Silva" 6 {6×1 string}
将嵌套数据写入 Parquet 文件。
parquetwrite("StudentCourseLoads.parq",data)
读取该嵌套的 Parquet 数据。
t2 = parquetread("StudentCourseLoads.parq")
t2=3×3 table
Names NumCourse Courses
_____________________ _________ ____________
FirstName LastName
_________ ________
"Akane" "Saito" 5 {5×1 string}
"Omar" "Ali" 3 {3×1 string}
"Maria" "Silva" 6 {6×1 string}
输入参数
输出 Parquet 文件的名称,指定为字符向量或字符串标量。
根据您写入的位置,filename
可以采用以下形式之一。
位置 | 形式 | ||||||||
---|---|---|---|---|---|---|---|---|---|
当前文件夹 | 要写入当前文件夹,请在 示例: | ||||||||
其他文件夹 | 要写入不同于当前文件夹的文件夹,请在 示例: 示例: | ||||||||
远程位置 | 要写入远程位置,
根据远程位置,
有关详细信息,请参阅处理远程数据。 示例: |
数据类型: char
| string
输入数据,指定为表或时间表。
使用 parquetwrite
导出结构化 Parquet 数据。有关支持写入的 Parquet 数据类型的详细信息,请参阅 Apache Parquet Data Type Mappings。
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: 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'})
自 R2024a 起
要在导出的数据中使用的自定义变量名称,指定为字符串数组、字符向量或字符向量元胞数组。默认情况下,parquetwrite
使用输入表或时间表的变量名称。
示例: parquetwrite(filename,T,VariableNames=["name","address","phone"])
每个输出行组要写入的行数,指定为非负数值标量或非负整数向量。
如果指定标量,标量值将设置输出 Parquet 文件中所有行组的高度。如果该标量值不是行组数量的确切倍数,则最后一个行组包含的行可能会比较少。
如果指定向量,则向量中的每个值将设置输出 Parquet 文件中一个对应行组的高度。向量中所有值的总和必须与输入表的高度匹配。
行组是可以一次性读入内存的 Parquet 文件的最小子集。降低行组高度有助于在读取时将数据放入内存。行组高度还会影响对 Parquet 数据集执行过滤操作的性能,因为在读取时,较大的行组高度可用于过滤更多的数据。
如果未指定 RowGroupHeights
并且输入表超过 67108864 行,则输出文件中的行组数等于 floor(TotalNumberOfRows/67108864)+1
。
示例: RowGroupHeights=100
示例: RowGroupHeights=[300, 400, 500, 0, 268]
要使用的 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 函数。
版本历史记录
在 R2019a 中推出使用 parquetwrite
将嵌套的表和时间表变量写入 Parquet 文件。
此函数支持基于线程的环境。
Parquet 文件可以将一定范围的行存储为一个不同的行组,以提高粒度和进行有针对性的分析。parquetread
在读取 Parquet 文件数据时使用 RowGroups
名称-值参量来确定行组。parquetwrite
在写入 Parquet 文件数据时使用 RowGroupHeights
名称-值参量来定义行组。
现在,您可以将嵌套元胞数组导出为 LIST 数组。
Parquet 文件要求时区感知时间戳采用 UTC 时区。当写入日期时间时,parquetwrite
将它们转换为等效的 UTC 值,并将原始时区值存储在 Parquet 文件的元数据中。parquetread
使用存储的原始时区值来启用往复。
写入包含 categorical
数据类型的 Parquet 数据。
parquetwrite
函数包含两个新的名称-值参量:
'VariableEncoding'
控制 Parquet 文件是对每个变量使用普通编码还是字典编码。'Version'
指定是使用 Parquet 1.0 还是 Parquet 2.0 文件格式。
写入含有变量名称的表格数据(这些变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符)。
另请参阅
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)