Parquet 是一种列式存储文件格式。 此函数允许您从 R 写入 Parquet 文件。
用法
write_parquet(
x,
sink,
chunk_size = NULL,
version = "2.4",
compression = default_parquet_compression(),
compression_level = NULL,
use_dictionary = NULL,
write_statistics = NULL,
data_page_size = NULL,
use_deprecated_int96_timestamps = FALSE,
coerce_timestamps = NULL,
allow_truncated_timestamps = FALSE
)
参数
- x
data.frame
、RecordBatch 或 Table- sink
字符串文件路径、连接、URI 或 OutputStream,或文件系统中的路径 (
SubTreeFileSystem
)- chunk_size
一次写入磁盘的数据行数。 这直接对应于 parquet 中每个行组中的行数。 如果为
NULL
,则会根据列数和行数对最佳大小进行最佳猜测,但如果数据少于 2.5 亿个单元格(行 x 列),则使用总行数。- version
parquet 版本: "1.0"、"2.4"(默认)、"2.6" 或 "latest"(目前等同于 2.6)。 数值会被强制转换为字符。
- compression
压缩算法。 默认 "snappy"。 请参阅详细信息。
- compression_level
压缩级别。 含义取决于压缩算法
- use_dictionary
logical:使用字典编码? 默认
TRUE
- write_statistics
logical:包含统计信息? 默认
TRUE
- data_page_size
设置列块内数据页的大致编码大小的目标阈值(以字节为单位)。 默认 1 MiB。
- use_deprecated_int96_timestamps
logical:将时间戳写入已弃用的 INT96 Parquet 格式? 默认
FALSE
。- coerce_timestamps
将时间戳强制转换为特定分辨率。 可以是
NULL
、"ms" 或 "us"。 默认NULL
(不进行强制转换)- allow_truncated_timestamps
logical:将时间戳强制转换为特定分辨率时允许数据丢失。 例如,如果强制转换为 "ms" 时微秒或纳秒数据丢失,则不要引发异常。 默认
FALSE
。
详细信息
由于格式的特性,Parquet 文件无法追加。 如果您想使用 Parquet 格式,但也希望能够扩展您的数据集,您可以写入额外的 Parquet 文件,然后将整个文件目录视为您可以查询的数据集。 请参阅 数据集文章 以获取示例。
参数 compression
、compression_level
、use_dictionary
和 write_statistics
支持各种模式
默认
NULL
使参数未指定,并且 C++ 库对每列使用适当的默认值(上面列出的默认值)单个、未命名的值(例如
compression
的单个字符串)适用于所有列未命名的向量,大小与列数相同,用于按位置顺序指定每列的值
命名的向量,用于指定命名列的值,当未提供时,使用该设置的默认值
compression
参数可以是以下任何一种(不区分大小写):“uncompressed”、“snappy”、“gzip”、“brotli”、“zstd”、“lz4”、“lzo” 或 “bz2”。 只有 "uncompressed" 保证可用,但几乎总是包含 "snappy" 和 "gzip"。 请参阅 codec_is_available()
。 如果可用,则使用默认的 "snappy",否则使用 "uncompressed"。 要禁用压缩,请设置 compression = "uncompressed"
。 请注意,"uncompressed" 列可能仍然具有字典编码。
参见
ParquetFileWriter 用于 Parquet 写入的较低级别接口。
示例
tf1 <- tempfile(fileext = ".parquet")
write_parquet(data.frame(x = 1:5), tf1)
# using compression
if (codec_is_available("gzip")) {
tf2 <- tempfile(fileext = ".gz.parquet")
write_parquet(data.frame(x = 1:5), tf2, compression = "gzip", compression_level = 5)
}