在尝试通过sparklyr::spark_connect连接到Databricks时,出现错误:tibble的所有列必须是向量

编程语言 2026-07-12

我在通过 sparklyr 将本地的RStudio设置连接到公司在Databricks的数据库时遇到了问题。

当我使用

sc <- sparklyr::spark_connect(cluster_id = Sys.getenv("DATABRICKS_CLUSTER_ID"), method = "databricks_connect")

时,似乎连接成功:

R 控制台显示已成功连接到集群的截图

然而,过了一会儿我就收到了一个Windows错误消息:

在成功连接后弹出的 Windows 错误截图

它也会输出到控制台:

Error in value[[3L]](cond) : 
  Failed to fetch data: All columns in a tibble must be vectors.

我的印象(也许不对)是,上面的错误是在RStudio尝试从它创建的连接填充“Connections”窗格时发生的。

如果我在忽略前面的错误后继续执行查询,我会收到错误,似乎是Python/reticulate将内容翻译回R 时出现问题:

as.data.frame(sparklyr::sdf_sql(sc, sql_string))

Error in `dplyr::as_tibble()`:
! All columns in a tibble must be vectors.
✖ Column `col1` is a
  `pandas.arrays.ArrowStringArray/pandas.core.strings.object_array.ObjectStringArrayMixin/pandas.arrays.ArrowExtensionArray/pandas.core.arraylike.OpsMixin/pandas.core.arrays.base.ExtensionArraySupportsAnyAll/pandas.core.arrays.string_.BaseStringArray/pandas.api.extensions.ExtensionArray/pandas.core.arrays._arrow_string_mixins.ArrowStringArrayMixin/python.builtin.object`
  object.

自从开始出现问题以来,我把Databricks集群升级到最新版本、把R 升级到最新版本、并把所有R 包都升级到最新版(包括更新看起来相关的包,比如 sparklyrreticulate,以获取在CRAN版本中可能没有的bug修复,改用最新的GitHub版本)。我这样做只是为了碰碰运气看看是否有帮助,但问题并未解决。(我还尝试将Databricks集群临时回滚到最早可用的运行时版本,以防是“新版本”的问题,但也没有任何区别,所以又把它设回最新。)

供参考,我当前的设置如下:

  • Databricks集群,运行时为17.3 LTS
  • Visual Studio Build Tools 2022(版本17.12.4)
  • RTools 4.5.6536
  • 我的.Renviron文件中的这些参数:DATABRICKS_HOSTDATABRICKS_WSIDDATABRICKS_CLUSTER_IDDATABRICKS_TOKEN
  • Python由 reticulate::install_python(version = "3.12.3") 安装
  • Databricks Connect由 pysparklyr::install_databricks(cluster_id = Sys.getenv("DATABRICKS_CLUSTER_ID")) 安装

我还不清楚在这个过程中是哪里出了用户错误,还是某个包有bug,或者是其他原因导致的问题。

以便参考,在我运行 spark_connect 命令后,从 sessionInfo() 获得的输出如下:

R version 4.5.2 (2025-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26200)

Matrix products: default
  LAPACK version 3.12.1

locale:
[1] LC_COLLATE=English_Australia.utf8  LC_CTYPE=English_Australia.utf8   
[3] LC_MONETARY=English_Australia.utf8 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.utf8    

time zone: Australia/Sydney
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] Matrix_1.7-4           jsonlite_2.0.0         sparklyr_1.9.3.9000   
 [4] dplyr_1.2.0            compiler_4.5.2         tidyselect_1.2.1      
 [7] Rcpp_1.1.1             parallel_4.5.2         tidyr_1.3.2           
[10] png_0.1-8              yaml_2.3.12            reticulate_1.45.0.9000
[13] lattice_0.22-9         R6_2.6.1               generics_0.1.4        
[16] curl_7.0.0             httr2_1.2.2            tibble_3.3.1          
[19] pysparklyr_0.2.0       openssl_2.3.5          DBI_1.3.0.9000        
[22] pillar_1.11.1          rlang_1.1.7            fs_1.6.6              
[25] config_0.3.2           otel_0.2.0             cli_3.6.5             
[28] withr_3.0.2            magrittr_2.0.4         ps_1.9.1              
[31] grid_4.5.2             processx_3.8.6         rstudioapi_0.18.0     
[34] dbplyr_2.5.2           rappdirs_0.3.4         askpass_1.2.1         
[37] lifecycle_1.0.5        connectcreds_0.2.0     vctrs_0.7.1           
[40] glue_1.8.0             purrr_1.2.1            httr_1.4.8            
[43] tools_4.5.2            pkgconfig_2.0.3

解决方案

似乎是Spark 4.1与 pysparklyr 之间的不兼容问题。在我创建了一个GitHub工单后,开发人员应用了修复;安装更新后的开发版本后,重新连接就成了可能。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章