在Databricks上使用Ray遇ArrowInvalid错误,求调试及环境变量设置方法
Databricks中PyCaret tune_model报错
ArrowInvalid: URI has empty scheme: '~/ray_results'的调试与解决 问题背景
在Databricks Notebook中执行以下操作:
依赖安装
%pip install jinja2 --upgrade %pip install mlflow --upgrade %pip install pycaret==3 catboost optuna lightgbm hyperopt tune-sklearn ray[tune] %pip install pandas==1.4.0
代码执行
import pandas as pd import sys import mlflow import pyspark.sql.functions as F from hyperopt import hp from hyperopt.pyll.base import scope from pycaret.classification.oop import ClassificationExperiment
space = {... exp = ClassificationExperiment() exp.setup(... lgbm = exp.create_model("lightgbm", verbose=False) sys.stdout.fileno = lambda: False lgbm_ft = exp.tune_model(lgbm, ...
模型可正常创建并在MLflow Experiments中显示,也能通过mlflow加载,但执行exp.tune_model时触发错误:
ArrowInvalid: URI has empty scheme: '~/ray_results'
一、错误调试方向
- 检查Ray输出路径解析:报错指向的
~/ray_results路径在Databricks环境中无法直接识别用户主目录符号~,需确认PyCaret调用Ray时是否使用了未正确解析的相对路径,可尝试手动指定绝对路径(如Databricks的DBFS路径/dbfs/xxx/ray_results)。 - 验证版本兼容性:PyCaret 3.x与Ray[tune]可能存在版本适配问题,可尝试切换到PyCaret官方推荐的Ray版本,或调整两者版本匹配。
- 排查环境权限与路径限制:确认当前集群对目标路径有读写权限,Databricks本地存储存在限制,建议优先使用DBFS路径而非本地路径。
- 检查
tune_model参数配置:核对tune_model中与调优框架相关的参数(如search_library、search_algorithm),确认Ray后端的配置是否正确,是否存在未明确设置的路径参数。
二、设置RAY_AIR_NEW_OUTPUT=0的方法
在Databricks Notebook中有两种生效方式:
- Notebook内前置设置:
在导入Ray或PyCaret之前执行以下代码:
import os os.environ["RAY_AIR_NEW_OUTPUT"] = "0"
- 集群全局设置:
通过集群初始化脚本添加环境变量,脚本内容如下:
export RAY_AIR_NEW_OUTPUT=0
添加后重启集群,确保环境变量在集群启动时加载生效。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

