Azure Databricks R笔记本安装raster/ncdf4/rgdal包报错排查
Azure Databricks R环境安装raster、rgdal、ncdf4包方案
报错根因
- 直接在R单元格运行bash init脚本触发R语法错:未指定单元格执行语言时,Databricks默认用R解析所有内容,bash语法不符合R语法规则直接报错。
%sh单元格内运行install.packages()触发bash语法错:%sh标记的单元格仅会将内容作为shell脚本解析,无法识别R语言的安装函数。- 依赖不全:rgdal、raster除libnetcdf-dev外,还依赖GDAL、PROJ、GEOS相关系统库,仅安装libnetcdf-dev会在编译阶段报错。
操作步骤
单节点临时测试方案
适合快速调试、单节点集群场景:
- 新建单元格,首行写
%sh标记为shell执行环境,运行以下命令安装全部系统依赖,单元格内不要混写R代码:
%sh apt-get update apt-get -y install libnetcdf-dev libgdal-dev gdal-bin libproj-dev libgeos-dev netcdf-bin
- 上述命令执行完成后,新建普通R单元格(无需加任何魔术命令,默认走R执行环境),运行包安装命令:
install.packages( c("ncdf4", "rgdal", "raster"), repos = "https://cloud.r-project.org/", type = "source" )
- 安装完成后在R单元格运行加载命令验证,无返回信息即为安装成功:
library(ncdf4) library(rgdal) library(raster)
集群持久化安装方案
适合多节点集群、需要重启后保留安装结果的场景:
- 编写init脚本,命名为
r_spatial_install.sh,内容如下:
#!/bin/bash apt-get update apt-get -y install libnetcdf-dev libgdal-dev gdal-bin libproj-dev libgeos-dev netcdf-bin /usr/bin/Rscript -e 'install.packages(c("ncdf4", "rgdal", "raster"), repos="https://cloud.r-project.org/", type="source", lib="/usr/lib/R/library")'
- 将脚本上传到DBFS路径,例如
dbfs:/databricks/init_scripts/r_spatial_install.sh。 - 进入集群配置页,打开「高级选项」-「Init脚本」配置项,添加上述DBFS脚本路径,保存配置后重启集群。
- 集群启动完成后,所有节点会自动完成依赖和R包安装,任意R笔记本可直接加载三个包使用。
注意事项
- 不同语言的代码必须拆分到对应类型的单元格执行,禁止在同一个单元格内混写shell命令和R代码。
- 若安装时提示系统库版本不匹配,可先通过
%sh单元格运行apt-get upgrade -y升级系统库后再执行R包安装。 - rgdal已停止维护,若使用高版本R环境遇到兼容问题,可替换为
sf、terra包,二者所需系统依赖与上述列表一致。
内容的提问来源于stack exchange,提问作者M_Potter
相关产品推荐
相关产品推荐

