识别 parquet 文件中的分区变量

smtd7mpg  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(162)

有没有一种简单的方法来识别用于划分 parquet 数据集的变量?
作为一个示例,下面我使用mtcars数据集创建了一个玩具Parquet地板。

# Load library
library(arrow)

# Write data to parquet
mtcars |> write_dataset("~/boop", partitioning = "cyl")

确定分区变量的一种方法是查看构成 parquet 的文件,如下所示:

# Open dataset & see files that are part of parquet
open_dataset("~/boop")$files

# [1] "XXXXX/boop/cyl=4/part-0.parquet" "XXXXX/boop/cyl=6/part-0.parquet"
# [3] "XXXXX/boop/cyl=8/part-0.parquet"

在这里,我可以看到cyl是分区变量,但是我需要解析它,如果有几个分区变量,可能会涉及到一点。
是否有一种简单的方法来确定分区变量?例如,是否有一个元数据变量来记录这些信息?

jdgnovmf

jdgnovmf1#

在有人提出更好的解决方案之前,这似乎是可行的:

# Load library
library(arrow)

# Write data to parquet
mtcars |> write_dataset("~/boop", partitioning = c("cyl", "gear"))

# Files in parquet
pq_files <- open_dataset("~/boop")$files

# Extract partiton names assuming */partition_name=value/* format
regmatches(pq_files, gregexpr("(?<=/)[^/]*(?==)", pq_files, perl = TRUE)) |> unlist() |> unique()
# [1] "cyl"  "gear"

正如问题中所建议的,我查看了parquet中的文件,然后使用一些正则表达式查找夹在/=之间的文本,这些文本应该对应于分区。

相关问题