只读 R 中的镶木地板列名称
Read only parquet column names in R
我希望使用 R 中的箭头包从镶木地板文件(带分区)中仅获取列名。我希望有一个仅包含列名的向量。我可以使用 collect 来做到这一点,但是使用更大的多分区和多文件镶木地板需要比预期更长的时间。这是我所拥有并希望实现的一个例子。
创建带分区的parquet(有些可能有多个分区)
arrow::write_dataset(mtcars, "C:/Data/parquet/mtcars", format = "parquet", partitioning = c("cyl"))
当前获取 parquet 列名称的方法
colnames(arrow::open_dataset(sources = "C:/Data/parquet/mtcars") %>%
dplyr::collect())
使用 colnames 和 collect 的结果
[1] "mpg" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" "cyl"
我觉得有一种更有效的方法可以在不进行收集的情况下获取 parquet 列名称。最终目标是拥有一个像上面那样的向量。接受各种选择和想法。
parquet
文件也可以用 lapply
和 rbindlist
读取,例如
data.table::rbindlist(lapply(Sys.glob("C:/Data/parquet/mtcars/*/part-*.parquet"), arrow::read_parquet)) %>% colnames
但是 open_dataset
和 collect
似乎效率更高。
根据 documentation, the Dateset object has got a schema method from which you can get the columns names.
我觉得应该是这样的:
arrow::open_dataset(sources = "C:/Data/parquet/mtcars")$schema$names
这只会加载数据集的元数据,应该比加载所有数据快得多。
如果您使用的是单个文件 parquet,那么 R-arrow 库中存在的函数的以下包装函数将适用于您:
read_parquet_schema <- function (file, col_select = NULL, as_data_frame = TRUE, props = ParquetArrowReaderProperties$create(),
...)
{
require(arrow)
reader <- ParquetFileReader$create(file, props = props, ...)
schema <- reader$GetSchema()
names <- names(schema)
return(names)
}
示例:
arrow::write_parquet(iris,"iris.parquet")
read_parquet_schema("iris.parquet")
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
我希望使用 R 中的箭头包从镶木地板文件(带分区)中仅获取列名。我希望有一个仅包含列名的向量。我可以使用 collect 来做到这一点,但是使用更大的多分区和多文件镶木地板需要比预期更长的时间。这是我所拥有并希望实现的一个例子。
创建带分区的parquet(有些可能有多个分区)
arrow::write_dataset(mtcars, "C:/Data/parquet/mtcars", format = "parquet", partitioning = c("cyl"))
当前获取 parquet 列名称的方法
colnames(arrow::open_dataset(sources = "C:/Data/parquet/mtcars") %>%
dplyr::collect())
使用 colnames 和 collect 的结果
[1] "mpg" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb" "cyl"
我觉得有一种更有效的方法可以在不进行收集的情况下获取 parquet 列名称。最终目标是拥有一个像上面那样的向量。接受各种选择和想法。
parquet
文件也可以用 lapply
和 rbindlist
读取,例如
data.table::rbindlist(lapply(Sys.glob("C:/Data/parquet/mtcars/*/part-*.parquet"), arrow::read_parquet)) %>% colnames
但是 open_dataset
和 collect
似乎效率更高。
根据 documentation, the Dateset object has got a schema method from which you can get the columns names.
我觉得应该是这样的:
arrow::open_dataset(sources = "C:/Data/parquet/mtcars")$schema$names
这只会加载数据集的元数据,应该比加载所有数据快得多。
如果您使用的是单个文件 parquet,那么 R-arrow 库中存在的函数的以下包装函数将适用于您:
read_parquet_schema <- function (file, col_select = NULL, as_data_frame = TRUE, props = ParquetArrowReaderProperties$create(),
...)
{
require(arrow)
reader <- ParquetFileReader$create(file, props = props, ...)
schema <- reader$GetSchema()
names <- names(schema)
return(names)
}
示例:
arrow::write_parquet(iris,"iris.parquet")
read_parquet_schema("iris.parquet")
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"