Databricks使用Modin时报No module named 'ray'错误如何解决
Databricks 环境 Modin 运行报
ModuleNotFoundError: No module named 'ray' 解决 故障复现
- 先后执行
pip install modin[all]、pip install modin[ray]安装Modin依赖,安装过程耗时长达15分钟,耗时异常 - 安装完成后运行以下代码读取S3存储的Parquet文件:
import modin.pandas as md df = md.read_parquet('s3://path/to/file')
- 触发报错:
ModuleNotFoundError: No module named 'ray' - 提前配置环境变量
os.environ["MODIN_ENGINE"] = "ray"后重试,报错未解决
故障原因
- Databricks集群分为Driver、Executor两类节点,Notebook单元格直接执行原生pip命令时,依赖仅会安装在Driver节点,Executor节点不会同步安装。Modin做分布式数据读取时任务会调度到Executor节点执行,节点缺少ray依赖就会抛出模块不存在的报错。
modin[all]、modin[ray]的安装标记会拉取ray全量可选依赖,包括dashboard、机器学习扩展等非核心组件,这些组件会和Databricks运行时预装的PyArrow、PySpark等包做版本冲突回溯,反复重试适配版本导致安装耗时异常偏长。- Modin仅会在首次导入
modin.pandas模块时读取MODIN_ENGINE环境变量,导入完成后再配置环境变量不会生效。
修复步骤
- 优先使用集群级依赖安装,避免单节点安装不同步问题
进入集群配置的库管理页,选择PyPI源安装两个核心包即可,不要带[all]/[ray]的额外依赖标记:modinray==2.9.0(版本不要超过2.10.0,避免和Databricks预装的grpc版本冲突)
集群会自动将依赖同步到所有Driver、Executor节点,正常安装耗时在1~2分钟。
- 如需在Notebook中临时调试安装,使用Databricks内置的
%pip魔法命令,该命令会自动将依赖同步到所有节点,安装完成后重启Python解释器加载依赖:
%pip install modin ray==2.9.0 dbutils.library.restartPython()
- 调整代码执行顺序,必须在导入
modin.pandas之前配置引擎环境变量:
import os # 该行必须放在import modin.pandas之前执行 os.environ["MODIN_ENGINE"] = "ray" import modin.pandas as md df = md.read_parquet('s3://path/to/file')
如果不想适配ray版本,也可以直接切换为Dask引擎,和Databricks环境兼容性更好,安装命令为%pip install modin "dask[complete]",对应环境变量配置为os.environ["MODIN_ENGINE"] = "dask"即可。
内容的提问来源于stack exchange,提问作者Vishal Balaji
相关产品推荐
相关产品推荐

