Unity Catalog集群无法运行PipelineModel加载函数问题排查
Unity Catalog集群加载PipelineModel失败问题解析
问题
在Unity Catalog集群中无法运行PipelineModel加载函数。
错误信息
[JVM_ATTRIBUTE_NOT_SUPPORTED] Spark Connect不支持依赖JVM的sparkContext属性,若需使用该属性,请创建常规Spark Session。
原因分析
Databricks包含两种Spark Session类型:
pyspark.sql.connect.session.SparkSession:启用Spark Connect的Unity Catalog集群默认使用该类型,采用客户端-服务器架构pyspark.sql.session.SparkSession:标准集群使用的传统单体式Spark Session
标准集群中,从挂载点加载模型文件的代码(如下)可正常运行:
from pyspark.sql import SparkSession #from pyspark.ml.pipeline import PipelineModel from pyspark.ml.classification import RandomForestClassificationModel from datetime import datetime from pyspark.ml import PipelineModel # 示例加载逻辑 # model = PipelineModel.load("/path/to/model")
但Unity Catalog集群使用Spark Connect创建的会话时,上述代码会触发错误——因为Spark Connect架构下无法直接访问依赖JVM的sparkContext属性,而PipelineModel的加载逻辑依赖该属性。
可行解决方案
- 切换至非Spark Connect的Unity Catalog集群:创建集群时关闭Spark Connect选项,使用传统的
pyspark.sql.session.SparkSession,即可正常加载PipelineModel。 - 使用Databricks Model Registry管理模型:将模型注册到Model Registry后,通过
mlflow.pyfunc.load_model或Databricks适配Spark Connect的模型加载API完成加载。 - 在集群侧执行加载逻辑:通过Databricks作业或笔记本的集群会话运行模型加载代码,避免在Spark Connect客户端会话中执行依赖JVM的操作。
内容的提问来源于stack exchange,提问作者Sudhansu Dash
相关产品推荐
相关产品推荐

