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

在R中高效合并Arrow格式数据集并保留格式的方法

在R中使用Arrow包高效合并数据集并保留Arrow格式

不需要将Arrow数据集转为data.frame再合并——这会导致全量数据加载到内存,极大降低大数据量下的处理效率。以下是两种直接在Arrow格式下快速合并的方法:

方法1:直接读取多文件合并为Arrow Dataset

如果你的两个数据文件都是Parquet格式,可以直接通过open_dataset指定多个文件路径,一次性生成合并后的Arrow Dataset,全程无需加载全量数据:

install.packages("arrow")
library(arrow)

# 直接合并两个Parquet文件为Arrow Dataset
merged_dataset <- open_dataset(c("a.parquet", "b.parquet"))

方法2:合并已加载的两个Arrow Dataset对象

如果已经分别打开了两个Dataset对象a和b,可以用以下两种方式合并:

方式2.1 使用combine_datasets

该函数专门用于合并多个Arrow Dataset,返回结果仍为Dataset类型,保持懒加载特性:

a <- open_dataset("a.parquet")
b <- open_dataset("b.parquet")

merged_dataset <- combine_datasets(list(a, b))

方式2.2 使用dplyr::bind_rows(需加载dplyr)

如果习惯使用dplyr语法,可以用bind_rows合并,返回结果为Arrow Table类型,若需要转回Dataset可进一步处理:

library(dplyr)

a <- open_dataset("a.parquet")
b <- open_dataset("b.parquet")

# 合并为Arrow Table
merged_table <- bind_rows(a, b)
# 转为InMemoryDataset(仍保留Arrow格式)
merged_dataset <- InMemoryDataset$create(merged_table)

关键说明

  • 以上所有合并操作均为懒执行,仅在需要提取具体数据(如调用collect())时才会实际计算,适合处理超大数据集。
  • 合并后的结果仍为Arrow格式(Dataset或Table),可直接进行后续的Arrow操作(过滤、聚合等),也可导出为Parquet文件:
# 导出合并后的数据集为Parquet文件
write_dataset(merged_dataset, "merged_parquet")
  • 确保两个数据集的列名、列类型一致,否则合并会报错;若存在差异,可先通过select或mutate统一列结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:05:17