在尝试通过sparklyr::spark_connect连接到Databricks时,出现错误:tibble的所有列必须是向量
我在通过 sparklyr 将本地的RStudio设置连接到公司在Databricks的数据库时遇到了问题。
当我使用
sc <- sparklyr::spark_connect(cluster_id = Sys.getenv("DATABRICKS_CLUSTER_ID"), method = "databricks_connect")
时,似乎连接成功:

然而,过了一会儿我就收到了一个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 包都升级到最新版(包括更新看起来相关的包,比如 sparklyr 和 reticulate,以获取在CRAN版本中可能没有的bug修复,改用最新的GitHub版本)。我这样做只是为了碰碰运气看看是否有帮助,但问题并未解决。(我还尝试将Databricks集群临时回滚到最早可用的运行时版本,以防是“新版本”的问题,但也没有任何区别,所以又把它设回最新。)
供参考,我当前的设置如下:
- Databricks集群,运行时为17.3 LTS
- Visual Studio Build Tools 2022(版本17.12.4)
- RTools 4.5.6536
- 我的.Renviron文件中的这些参数:
DATABRICKS_HOST、DATABRICKS_WSID、DATABRICKS_CLUSTER_ID和DATABRICKS_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工单后,开发人员应用了修复;安装更新后的开发版本后,重新连接就成了可能。