跳到內容

Schema 是一個 Arrow 物件,包含 Field,Field 將名稱映射到 Arrow 資料類型。當您想要將 R data.frame 轉換為 Arrow,但不想要依賴 R 類型到 Arrow 類型的預設映射時,例如當您想要選擇特定的數值精度,或者當建立 Dataset 且您想要確保特定的 schema 而不是從各種檔案推斷 schema 時,請建立 Schema

許多 Arrow 物件,包括 TableDataset,都有一個 $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:傳回 SchemaField 的列表,適用於迭代

  • $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 會被捨棄。