You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中使用arrow包无需collect即可获取分区Parquet文件列名

解决方案

arrow::open_dataset()返回的Dataset对象本身支持直接读取列名,完全不需要调用collect()加载全量数据,该操作仅解析数据集元信息,哪怕是TB级的多分区Parquet数据集也可以毫秒级返回结果。

代码实现

# 仅加载数据集元数据,不会读取任何实际存储的行数据
ds <- arrow::open_dataset(sources = "C:/Data/parquet/mtcars")
# 直接获取包含分区字段的列名向量
col_names <- colnames(ds)

返回结果和你原有实现的输出完全一致:

[1] "mpg"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb" "cyl"

原方法性能差的原因

原有实现调用dplyr::collect()会把全量数据集所有分区的所有数据全部加载到R内存中,再提取列名,产生了大量不必要的IO和内存开销,数据量越大耗时越高。

补充说明

如果你的数据集存在不同分区文件schema不一致的情况,可以在open_dataset中添加unify_schemas = TRUE参数,强制统一所有文件的schema后再提取列名即可。

内容的提问来源于stack exchange,提问作者Ryan Garnett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:54:03