r 箭头将所有列的列 type/schema 设置为 char

r arrow set column type/schema to char for all columns

{arrow} 对列类型的自动检测在打开大型 csv 文件时给我带来了一些麻烦。特别是,它会丢弃一些标识符的前导零并做一些其他不幸的事情。由于数据集非常宽(几百列)并且我不想手动设置所有模式值,我想以某种方式以编程方式设置它。

一个好的开始是在使用 arrow::open_dataset 打开数据集时将 所有 列转换为字符。或者更正特定列的现有 datase_connection$schema 对象。

但是,我无法找到如何这样做。

当您使用 arrow::open_dataset() 时,您可以手动定义一个模式来确定列名和类型。我在下面粘贴了一个示例,它首先显示了 auto-detecting 列名称类型的默认行为,然后使用模式来覆盖它并指定您自己的列名称和类型。此处的示例按要求以编程方式执行此操作,但您也可以手动定义架构。

library(arrow)

write_dataset(mtcars, "mtcars")

# opens the dataset with column detection
dataset <- open_dataset("mtcars")
dataset
#> FileSystemDataset with 1 Parquet file
#> mpg: double
#> cyl: double
#> disp: double
#> hp: double
#> drat: double
#> wt: double
#> qsec: double
#> vs: double
#> am: double
#> gear: double
#> carb: double
#> 
#> See $metadata for additional Schema metadata

# define new schema automatically
chosen_schema <- schema(
  purrr::map(names(dataset), ~Field$create(name = .x, type = string()))
)

# now opens the dataset with the chosen schema
open_dataset("mtcars", schema = chosen_schema) 
#> FileSystemDataset with 1 Parquet file
#> mpg: string
#> cyl: string
#> disp: string
#> hp: string
#> drat: string
#> wt: string
#> qsec: string
#> vs: string
#> am: string
#> gear: string
#> carb: string