Arrow包是否有原生函数获取已打开Hive风格数据集的分区名向量?
利用Arrow原生函数提取Hive分区目录值用于MPI并行读取
在集群环境中,我通过pbdMPI实现MPI多节点并行,结合arrow和dplyr包读取超大规模Parquet数据集。这类Hive结构的分区目录(比如示例中以flightDate=YYYY-MM-DD命名的子目录)非常适合实现arrow-dplyr的目录批次并行读取——我需要提取分区目录中的值生成字符向量,传入dplyr::filter()让每个MPI进程独立读取对应子目录的数据块。
示例目录结构
'/dir1/dir2/flightDate=2022-04-17/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-05-18/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-06-18/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-07-19/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-08-19/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-09-19/dir3/part-0.parquet' '/dir1/dir2/flightDate=2022-10-20/dir3/part-0.parquet'
目标输出向量
我需要从上述目录中提取日期值,生成如下字符向量:
dates = c('2022-04-17', '2022-05-18', '2022-06-18', '2022-07-19', '2022-08-19', '2022-09-19', '2022-10-20')
向量用途示例
该向量用于MPI进程的任务拆分,让每个进程读取不同的数据块:
library(pbdMPI) library(arrow) library(dplyr) my_dates = dates[comm.chunk(length(dates), form = "vector")] my_data = ds %>% filter(flightDate %in% my_dates) %>% collect()
核心问题
目前我可以通过list.dirs()结合字符串处理实现分区值提取,但想知道是否存在Arrow原生函数可以直接完成这个操作?理想状态是在执行ds = arrow::open_dataset(<filename>)后,直接操作包含目录信息的ds对象来获取分区值。
内容的提问来源于stack exchange,提问作者George Ostrouchov
相关产品推荐
相关产品推荐

