Schema
是一个 Arrow 对象,包含 Field,Field 将名称映射到 Arrow 数据类型。 当您想要将 R data.frame
转换为 Arrow,但不希望依赖 R 类型到 Arrow 类型的默认映射时(例如,当您想要选择特定的数值精度时),或者在创建 Dataset 并且您希望确保特定的模式而不是从各种文件中推断它时,请创建一个 Schema
。
许多 Arrow 对象,包括 Table 和 Dataset,都有一个 $schema
方法(活动绑定),可以让您访问它们的模式。
方法
$ToString()
: 转换为字符串$field(i)
: 返回索引i
处的字段(基于 0)$GetFieldByName(x)
: 返回名称为x
的字段$WithMetadata(metadata)
: 返回一个设置了键值metadata
的新Schema
。 请注意,metadata
中的所有列表元素都将被强制转换为character
。$code(namespace)
: 返回生成此模式所需的 R 代码。 使用namespace=TRUE
来调用arrow::
。
活动绑定
$names
: 返回字段名称(在names(Schema)
中调用)$num_fields
: 返回字段数(在length(Schema)
中调用)$fields
: 返回Schema
中Field
的列表,适合迭代$HasMetadata
: 逻辑值:此Schema
是否具有额外的元数据?$metadata
: 以命名列表形式返回键值元数据。 通过分配进行修改或替换 (sch$metadata <- new_metadata
)。 所有列表元素都被强制转换为字符串。
R 元数据
将 data.frame 转换为 Arrow Table 或 RecordBatch 时,来自 data.frame
的属性与表一起保存,以便可以在 R 中忠实地重建对象(例如,使用 as.data.frame()
)。 此元数据可以位于 data.frame
的顶层(例如 attributes(df)
)或列(例如 attributes(df$col_a)
)或仅用于列表列:元素级别(例如 attributes(df[1, "col_a"])
)。 例如,这允许将 haven
列存储在表中,并且能够在拉回到 R 时忠实地重新创建它们。 此元数据与模式(列名和类型)分开,模式与其他 Arrow 客户端兼容。 R 元数据仅由 R 读取,其他客户端(例如,Pandas 有自己的自定义元数据)会忽略它。 此元数据存储在 $metadata$r
中。
由于 Schema 元数据键和值必须是字符串,因此通过将 R 的属性列表结构序列化为字符串来保存此元数据。 如果序列化的元数据大小超过 100Kb,默认情况下,从 3.0.0 版本开始对其进行压缩。 要禁用此压缩(例如,对于与 3.0.0 之前的 Arrow 版本兼容并且包含大量元数据的表),请将选项 arrow.compress_metadata
设置为 FALSE
。 较旧版本的 arrow 可以读取具有压缩元数据的文件,但元数据将被删除。