如何在 R 中使用 Apache Arrow 的自定义函数?

How to use custom function with Apache Arrow in R?

我正在尝试用 R 学习 Apache Arrow。我找不到如何让用户 用箭头定义函数。

library(arrow)
#> See arrow_info() for available features
#> 
#> Attaching package: 'arrow'
#> The following object is masked from 'package:utils':
#> 
#>     timestamp
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

简单地return向量的平均值

f1 <- function(x) {
  
  x <- Array$create(x)
  
  res <- mean(x, na.rm = TRUE)
  
  return(as.vector(res))
}

如果我尝试使用我的 f1 函数,我会收到此警告和结果 是在计算之前将数据拉入R。

ds <- arrow_table(head(mtcars, 6))

ds %>% 
  mutate(mpg2 = f1(mpg)) %>% 
  collect()
#> Warning: Expression f1(mpg) not supported in Arrow; pulling data into R
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb mpg2
#> 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 20.5
#> 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 20.5
#> 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 20.5
#> 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 20.5
#> 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 20.5
#> 6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 20.5

有没有办法在 R 中的 Arrow 中使用自定义函数?

reprex package (v2.0.1)

于 2022-03-18 创建

这似乎是 documented behaviour:

If you try to call a function which does not have arrow mapping, the data will be pulled back into R, and you will see a warning message.

如果您考虑一下,这是有道理的,因为 'backend' 不包含嵌入式 R 解释器,因此我们可能无法期望向下发送任意函数。