跳至內容

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.frameRecordBatchTable

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

不可見地傳回輸入 x

詳細資訊

由於格式的特性,Parquet 檔案無法附加。如果您想使用 Parquet 格式,但也想要擴充資料集的能力,您可以寫入其他 Parquet 檔案,然後將整個檔案目錄視為您可以查詢的 Dataset。請參閱 資料集文章 以取得範例。

參數 compressioncompression_leveluse_dictionarywrite_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)
}