You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks 5.5 LTS中使用sparklyr读取Parquet文件报错排查

解决Databricks中sparklyr读取Parquet时找不到record_batch_stream_reader的问题

你遇到的问题核心是本地环境与Databricks环境的arrow包版本不兼容,再加上路径配置的小细节问题,导致了这个报错。下面给你详细的分析和解决方案:

问题原因分析

你本地使用的是arrow_0.16.0.2,这个版本中存在record_batch_stream_reader函数,但Databricks 5.5 LTS环境默认的arrow版本可能更高(比如1.0+)——arrow在1.0版本后对API做了较大调整,很多旧函数被重命名或移除,record_batch_stream_reader就是其中之一。另外你读取Parquet时用的路径user/iris.parquet缺少了/dbfs/前缀,在Databricks中访问DBFS文件需要完整路径。

解决方案

方案1:对齐arrow包版本到本地使用的0.16.0.2

在Databricks的R notebook中先安装指定版本的arrow,再执行你的代码:

# 安装与本地一致的arrow版本
install.packages("arrow", version = "0.16.0.2", repos = "https://cran.r-project.org/")
library(arrow)
library(sparklyr)

# 建立Spark连接
sc <- sparklyr::spark_connect(method = "databricks")
# 写入Parquet到DBFS(路径要完整)
arrow::write_parquet(iris, "/dbfs/user/iris.parquet")
# 读取时使用完整的DBFS路径
iris_sdf <- sparklyr::spark_read_parquet(sc, "iris_sdf", "/dbfs/user/iris.parquet")

方案2:使用sparklyr原生读写Parquet(更推荐)

既然是在Spark环境中,直接用sparklyr的函数读写Parquet可以避免arrow版本兼容问题,操作更顺畅:

library(sparklyr)

# 建立Spark连接
sc <- sparklyr::spark_connect(method = "databricks")
# 将R数据框直接转为Spark DataFrame
iris_spark <- sdf_copy_to(sc, iris, "iris_temp")
# 用sparklyr写入Parquet到DBFS
spark_write_parquet(iris_spark, "/dbfs/user/iris_spark.parquet")
# 读取Parquet文件
iris_sdf <- spark_read_parquet(sc, "iris_sdf", "/dbfs/user/iris_spark.parquet")

验证步骤

执行完代码后,可以用以下命令验证读取是否成功:

# 查看数据结构
str(iris_sdf)
# 显示前几行数据
head(iris_sdf)

内容的提问来源于stack exchange,提问作者Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:47:30