在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
相关产品推荐
相关产品推荐

