【发布时间】:2022-11-05 00:14:05
【问题描述】:
我有一个很大的镶木地板文件,我通过arrow::open_dataset 引用。我想获得最大值一个或多个列中,我不知道先验哪些(或多少)列。一般来说,这听起来像“使用 dplyr 编程”(假设 arrow-10 及其最近对dplyr::across 的支持),但我无法让它工作。
write_parquet(data.frame(a=c(1,9), b=c(2,10), d=c("q","r")), "quux.parquet")
open_dataset("quux.parquet") %>%
summarize(across(sym(vars), ~ max(.))) %>%
collect()
# # A tibble: 1 x 1
# a
# <dbl>
# 1 9
但是当 vars 的长度为 2 或更多时,我认为我需要使用 syms 或类似的,但这失败了
open_dataset("quux.parquet") %>%
summarize(across(all_of(syms(vars)), ~ max(.))) %>%
collect()
# Error: Must subset columns with a valid subscript vector.
# x Subscript has the wrong type `list`.
# i It must be numeric or character.
我如何懒惰(不加载所有数据)在箭头数据集中找到多列的最大值?
虽然我怀疑 dplyr 中的正确答案将是某种形式的 syms,然后箭头是否支持这是下一个问题。我不受 dplyr 机制的约束,如果有使用ds$NewScan() 或类似方法的方法,我可以接受。
【问题讨论】:
-
你能说
vars是什么吗?变量名作为字符串的字符向量?
标签: r dplyr rlang apache-arrow