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.0」(已棄用)、「2.4」(預設)、「2.6」或「latest」(目前等同於 2.6)。數值會強制轉換為字元。
- compression
壓縮演算法。預設為「snappy」。請參閱詳細資訊。
- compression_level
壓縮等級。意義取決於壓縮演算法
- use_dictionary
邏輯值:使用字典編碼?預設為
TRUE
- write_statistics
邏輯值:包含統計資訊?預設為
TRUE
- data_page_size
設定欄區塊內資料頁面大約編碼大小的目標閾值(以位元組為單位)。預設值為 1 MiB。
- use_deprecated_int96_timestamps
邏輯值:將時間戳記寫入已棄用的 INT96 Parquet 格式?預設為
FALSE
。- coerce_timestamps
將時間戳記轉換為特定解析度。可以是
NULL
、「ms」或「us」。預設為NULL
(不轉換)- allow_truncated_timestamps
邏輯值:將時間戳記強制轉換為特定解析度時,是否允許資料遺失。例如,如果強制轉換為「ms」時遺失微秒或奈秒資料,則不引發例外。預設為
FALSE
。
詳細資訊
由於格式的特性,Parquet 檔案無法附加。如果您想使用 Parquet 格式,但也想要擴充資料集的能力,您可以寫入其他 Parquet 檔案,然後將整個檔案目錄視為您可以查詢的 Dataset。請參閱 資料集文章 以取得範例。
參數 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」可用,則使用預設值「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)
}