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

如何基于Arrow数据集惰性计算指定多列的最大值?

解决Arrow数据集多列惰性计算最大值的方法

dplyr 方法

你之前的错误在于用syms()转换列名列表,across()的列选择参数直接支持字符向量,无需转成符号列表。正确写法如下:

vars <- c("a", "b")
open_dataset("quux.parquet") %>%
  summarize(across(all_of(vars), ~ max(., na.rm = TRUE))) %>% # 建议添加na.rm处理缺失值
  collect()
# # A tibble: 1 x 2
#       a     b
#   <dbl> <dbl>
# 1     9    10

该操作完全惰性:summarize仅生成计算逻辑,直到collect()才会触发实际数据读取与计算,不会将整个Parquet文件加载到内存。

非dplyr(原生Arrow)方法

如果使用NewScan()原生API,可按以下步骤实现:

  1. 创建扫描器并指定目标列
  2. 定义各列的最大值聚合规则
  3. 执行聚合并收集结果
ds <- open_dataset("quux.parquet")
# 创建扫描器并选择要计算的列
scanner <- ds$NewScan()$SelectColumns(vars)
# 生成每个列的max聚合表达式
agg_exprs <- lapply(vars, function(col) {
  call("max", col, na.rm = TRUE)
})
names(agg_exprs) <- vars
# 执行聚合并获取结果
scanner$Aggregate(agg_exprs)$Collect()
# # A tibble: 1 x 2
#       a     b
#   <dbl> <dbl>
# 1     9    10

这种方式同样是惰性执行,扫描器仅读取计算所需的列,避免加载全部数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:35:17