Schema
是一個 Arrow 物件,包含 Field,Field 將名稱映射到 Arrow 資料類型。當您想要將 R data.frame
轉換為 Arrow,但不想要依賴 R 類型到 Arrow 類型的預設映射時,例如當您想要選擇特定的數值精度,或者當建立 Dataset 且您想要確保特定的 schema 而不是從各種檔案推斷 schema 時,請建立 Schema
。
許多 Arrow 物件,包括 Table 和 Dataset,都有一個 $schema
方法 (主動綁定),可讓您存取它們的 schema。
方法
$ToString()
:轉換為字串$field(i)
:傳回索引i
(從 0 開始) 的 field$GetFieldByName(x)
:傳回名稱為x
的 field$WithMetadata(metadata)
:傳回一個新的Schema
,其中設定了鍵值metadata
。請注意,metadata
中的所有列表元素都將被強制轉換為character
。$code(namespace)
:傳回產生此 schema 所需的 R 程式碼。使用namespace=TRUE
以使用arrow::
呼叫。
主動綁定
$names
:傳回 field 名稱 (在names(Schema)
中呼叫)$num_fields
:傳回 field 的數量 (在length(Schema)
中呼叫)$fields
:傳回Schema
中Field
的列表,適用於迭代$HasMetadata
:邏輯值:此Schema
是否有額外的 metadata?$metadata
:以具名列表形式傳回鍵值 metadata。透過賦值來修改或替換 (sch$metadata <- new_metadata
)。所有列表元素都會被強制轉換為字串。
R Metadata
當將 data.frame 轉換為 Arrow Table 或 RecordBatch 時,data.frame 的屬性會與表格一起儲存,以便在 R 中忠實地重建物件 (例如,使用 as.data.frame())。此 metadata 可以位於 data.frame 的頂層 (例如 attributes(df)
) 或在欄位層級 (例如 attributes(df$col_a)
),或者僅對於列表欄位:元素層級 (例如 attributes(df[1, "col_a"])
)。例如,這允許在表格中儲存 haven
欄位,並在拉回 R 時能夠忠實地重新建立它們。此 metadata 與 schema (欄位名稱和類型) 是分開的,schema 與其他 Arrow 用戶端相容。R metadata 僅由 R 讀取,並被其他用戶端 (例如 Pandas 有自己的自訂 metadata) 忽略。此 metadata 儲存在 $metadata$r
中。
由於 Schema metadata 的鍵和值必須是字串,因此此 metadata 通過將 R 的屬性列表結構序列化為字串來儲存。如果序列化的 metadata 大小超過 100Kb,則預設情況下從版本 3.0.0 開始會進行壓縮。若要停用此壓縮 (例如,對於與 3.0.0 之前的 Arrow 版本相容且包含大量 metadata 的表格),請將選項 arrow.compress_metadata
設定為 FALSE
。具有壓縮 metadata 的檔案可以被舊版本的 Arrow 讀取,但 metadata 會被捨棄。