如何设置Arrow在找不到函数绑定时直接报错而非拉取数据到R?
问题
是否有办法阻止Arrow在找不到合适的函数绑定时默认将数据拉取到R中,使其不再显示‘pulling data into R’的警告信息,而是直接抛出错误?是否有可调整的选项实现该行为?已知Arrow文档中有可用绑定列表,但希望通过上述默认设置提升迭代实验效率,避免陷入Arrow框架外的长时间计算。
重现代码
library(arrow, warn.conflicts = FALSE) library(dplyr, warn.conflicts = FALSE) library(stringr) sessionInfo() #> R version 4.1.3 (2022-03-10) #> Platform: x86_64-apple-darwin17.0 (64-bit) #> Running under: macOS Big Sur/Monterey 10.16 #> #> Matrix products: default #> BLAS: /opt/R/4.1.3/Resources/lib/libRblas.0.dylib #> LAPACK: /opt/R/4.1.3/Resources/lib/libRlapack.dylib #> #> locale: #> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 #> #> attached base packages: #> [1] stats graphics grDevices utils datasets methods base #> #> other attached packages: #> [1] stringr_1.4.1 dplyr_1.0.10 arrow_10.0.0 #> #> loaded via a namespace (and not attached): #> [1] pillar_1.8.1 compiler_4.1.3 highr_0.9 R.methodsS3_1.8.2 #> [5] R.utils_2.12.0 tools_4.1.3 digest_0.6.29 bit_4.0.4 #> [9] evaluate_0.16 lifecycle_1.0.2 tibble_3.1.8 R.cache_0.16.0 #> [13] pkgconfig_2.0.3 rlang_1.0.6 reprex_2.0.2 DBI_1.1.3 #> [17] cli_3.4.1 rstudioapi_0.14 yaml_2.3.5 xfun_0.32 #> [21] fastmap_1.1.0 withr_2.5.0 styler_1.7.0 knitr_1.40 #> [25] generics_0.1.3 fs_1.5.2 vctrs_0.4.2 bit64_4.0.5 #> [29] tidyselect_1.1.2 glue_1.6.2 R6_2.5.1 fansi_1.0.3 #> [33] rmarkdown_2.16 purrr_0.3.4 magrittr_2.0.3 htmltools_0.5.3 #> [37] assertthat_0.2.1 utf8_1.2.2 stringi_1.7.8 R.oo_1.25.0 df <- tibble( date = c("28-Aug-21", "11-Mar-19") ) df <- arrow::arrow_table(df) df %>% mutate(date = str_remove(date, "\\d{2}$")) #> Warning: Expression str_remove(date, "\\d{2}$") not supported in Arrow; pulling #> data into R #> # A tibble: 2 × 1 #> date #> <chr> #> 1 28-Aug- #> 2 11-Mar-
Created on 2022-11-08 with reprex v2.0.2
解决方案
可以通过设置Arrow的执行选项allow_r_kernel为FALSE来实现需求:
- 该选项默认值为
TRUE,允许Arrow在遇到不支持的表达式时降级到R内核处理(即拉取数据到R并发出警告) - 设置为
FALSE后,任何无法在Arrow引擎中执行的表达式都会直接抛出错误,不再拉取数据到R
具体代码示例:
library(arrow, warn.conflicts = FALSE) library(dplyr, warn.conflicts = FALSE) library(stringr) # 设置执行选项,禁止降级到R内核 arrow::set_execution_options(allow_r_kernel = FALSE) df <- tibble( date = c("28-Aug-21", "11-Mar-19") ) %>% arrow::arrow_table() # 此时运行不支持的表达式会直接报错 df %>% mutate(date = str_remove(date, "\\d{2}$"))
运行上述代码会抛出类似如下的错误:
Error: Expression str_remove(date, "\\d{2}$") not supported in Arrow Call collect() first to pull data into R.
内容的提问来源于stack exchange,提问作者andreranza
相关产品推荐
相关产品推荐

