You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用databricks-connect将Spark模型日志到Databricks注册表报错

使用Databricks Connect + MLflow日志Spark模型到Databricks注册表的错误解决

问题场景

通过Databricks Connect,使用MLflow将训练完成的Spark模型日志到Databricks模型注册表时,执行mlflow.spark.log_model代码行程序中断。

使用的代码:

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Users/xxxxx/experiment_name")

with mlflow.start_run(run_name="my_run") as _:
    mlflow.spark.log_model(my_spark_model, "my_model")

关键错误信息

22/07/21 11:05:03 WARN ProtoSerializer: 反序列化远程异常失败
java.io.InvalidClassException: 无法读取类描述符
...
Caused by: java.lang.ClassNotFoundException: com.databricks.backend.daemon.data.common.InvalidMountException
...
22/07/21 11:05:03 ERROR Instrumentation: com.databricks.service.SparkServiceRemoteException: com.databricks.backend.daemon.data.common.InvalidMountException: 在挂载点'/databricks/mlflow-tracking'内解析路径'/000000000000000/0a0a0a0a0a0a0a0a0a0a/artifacts\experiment_name/sparkml'时出错
...
Caused by: java.io.IOException: 不支持该路径的访问机制,请使用MLflow客户端
...
最终抛出:
py4j.protocol.Py4JJavaError: 调用o1532.copyToLocalFile时出错。
: java.io.IOException: 命令字符串中有(null)条目: null chmod 0644 C:\Users\itscarlayall\AppData\Local\Temp\tmpalmxdo16\model\sparkml\metadata_SUCCESS

问题原因

  1. Databricks Connect环境下,mlflow.spark.log_model依赖本地Spark环境处理模型文件,无法直接适配Databricks的MLflow存储路径,导致文件系统访问机制不兼容。
  2. Windows环境下路径分隔符(\)与Unix风格(/)混合,引发路径解析错误。
  3. Databricks Connect与集群Spark版本不兼容,导致类加载失败(如InvalidMountException找不到)。
  4. 本地MLflow配置或认证缺失,导致无法正确访问Databricks存储。

解决步骤

1. 替换日志模型的API

放弃使用mlflow.spark.log_model,改用先本地临时保存模型,再通过MLflow客户端日志的方式,避免本地Spark与Databricks存储的兼容性问题:

import tempfile
import mlflow
from mlflow.models.signature import infer_signature

mlflow.set_tracking_uri("databricks")
mlflow.set_experiment("/Users/xxxxx/experiment_name")

with mlflow.start_run(run_name="my_run") as run:
    # 临时保存模型到本地目录
    with tempfile.TemporaryDirectory() as tmp_dir:
        my_spark_model.save(tmp_dir)
        # (可选)生成模型签名,用于模型注册表的类型校验
        signature = infer_signature(test_data, my_spark_model.transform(test_data))
        # 日志模型到Databricks
        mlflow.log_model(
            artifact_path="my_model",
            path=tmp_dir,
            model_type="spark",
            signature=signature
        )
    # (可选)将日志的模型注册到Databricks模型注册表
    mlflow.register_model(
        model_uri=f"runs:/{run.info.run_id}/my_model",
        name="your_registry_model_name"
    )

2. 匹配Databricks Connect与集群版本

确保本地安装的databricks-connect版本与Databricks集群的Spark版本完全一致,版本不匹配会引发类找不到、序列化失败等问题。

3. 处理Windows路径问题

避免手动拼接路径时混合使用\和/,借助Python标准库(如tempfile)自动生成兼容路径,减少路径解析错误。

4. 验证MLflow配置

检查本地~/.databrickscfg文件,确保已配置对应Databricks工作区的认证信息(包括instance URL和个人访问token),保证MLflow客户端能正常连接到Databricks。

内容的提问来源于stack exchange,提问作者itscarlayall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:36:16