Arrow R 软件包无法在 Databricks 上安装

问题描述 投票:0回答:2

大约 6 周前(2022 年 4 月上旬),我测试了 Databricks 工作流程,以确保我可以从 Airflow 远程触发 databricks 上的作业,并且成功了。

作为流程的一部分,工作流激活预构建的计算,然后将各种 R 库从 DBFS 加载到计算中,其中一个包是“箭头”,但是,虽然所有其他包加载都没有问题,但该包无法加载成功,然后导致我的工作流程崩溃。

当我查看工作流程时,我收到以下错误“DRIVER_LIBRARY_INSTALLATION_FAILURE”。错误消息:在 [0303-130414-840hkwxf] orgId [5132544506122561] 上安装库 [RCranPkgId(arrow,None,None)] 的命令在 Databricks 基础设施内失败,请参见下图。箭头失败消息” data-fileid="0698Y00000JFZosQAHI 已直接在 databricks 内部触发工作流程,但仍然遇到相同的问题,因此显然它没有与气流相关的原因。

我尝试从 dbfs 中删除 arrow 包,看看是否可以在没有它的情况下运行测试,但每次删除它时,当我重试工作流程时,它都会返回。

然后我检查了 CRAN 以查看 arrow 最近是否已更新,它是在 2022-05-09 上更新的,所以我加载了旧版本,(首先从 dbfs 中删除了与其相关的所有内容),这也不起作用,请参阅附图。

    # Databricks notebook source
.libPaths()
 
# COMMAND ----------
 
dir("/databricks/spark/R/lib")
 
# COMMAND ----------
 
## Add current working directory to library paths
.libPaths(c(getwd(), .libPaths()))
 
# COMMAND ----------
 
## The latest versions from CRAN
install.packages(c('arrow', 'tidyverse', 'aws.s3', 'sparklyr', 'cluster', 'sqldf', 'lubridate', 'ChannelAttribution'), repos = "http://cran.us.r-project.org")
 
# COMMAND ----------
 
dir("/tmp/Rserv/conn970")
 
# COMMAND ----------
 
## Copy from driver to DBFS
system("cp -R /tmp/Rserv/conn970 /usr/lib/R/site-library")
 
# COMMAND ----------
 
dir("/usr/lib/R/site-library")
 
# COMMAND ----------
 
## Copy from driver to DBFS
system("cp -R /tmp/Rserv/conn970 /dbfs/r-libraries")
 
# COMMAND ----------
 
dir("/dbfs/r-libraries")
# COMMAND ----------
 
# Add packages to libPaths
.libPaths("/dbfs/r-libraries")
 
# COMMAND ----------
 
# Check that the dbfs libraries are in libPath
.libPaths()

我还附加了我在 R 中使用的脚本来将包加载到 dbfs,我认为这很好,因为每个其他包都正确加载,但是它可能有助于理解我在做什么或为什么会发生错误。

我想知道的是:

Do you see anything that I might be doing incorrectly inside my attached libraries script?
Is there an issue with loading the arrow package and if so do you have a work around that can prevent the failure?
Why does dbfs continue to re-install arrow despite my removal of it from the directory?
Can I permanently remove the arrow package from dbfs without it returning everytime I trigger the workflow?

提前非常感谢你们提供的任何帮助。

r databricks sparkr
2个回答
2
投票

我明白了,这个问题有两个方面。当我查看该作业的 json 文件时,第一个很明显。在其中,我指定在构建计算时应加载某些包,此配置由于它首先运行而覆盖了我的模型的脚本。在 json 文件中看到这一点解释了为什么箭头库不断尝试加载,无论我已将其从 dbfs 中删除。

解决方案的第二部分是如何让箭头加载而不会失败,当我重新尝试在 dbfs 上或独立地在我的模型上重新安装它时,这种情况继续发生。默认情况下,Databricks 似乎尝试从 CRAN (https://cran.r-project.org/) 加载包,我不明白为什么失败,可能是上次更新后 ubuntu 的问题???

解决方案是从我从 MRAN 获取的快照安装它,位置为“https://cran.microsoft.com/snapshot/2022-02-24/”。谢谢user2554330,你的评论让我重新思考并让我走上了正确的方向。

我希望这可以帮助遇到类似问题的其他人。


0
投票

运行这样的单元可以快速安装 R 软件包。

rspm
提取二进制编译版本。

%sh
apt install -y apt-file
Rscript -e "install.packages('rspm', repos = 'https://cloud.r-project.org/')"
Rscript -e "rspm::install_sysreqs()"
Rscript -e "rspm::enable(); install.packages('arrow')"
© www.soinside.com 2019 - 2024. All rights reserved.