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

SynapseML LightGBM导出PMML遇安装及兼容性问题求助

问题描述

根据SynapseML官方文档,我们可将LightGBM模型导出为PMML格式,所需依赖包来自jpmml-sparkml-lightgbm项目。但在Databricks中无法通过指定的Maven路径安装该包(显示红色叉号),尝试安装其他相关包后又出现错误:Transformer class com.microsoft.azure.synapse.ml.lightgbm.LightGBMClassificationModel is not supported。

请问是否有更优解决方案?是否应使用SynapseML以外的LightGBM版本?

附相关代码:

stages = []
for categoricalCol in categoricalColumns:
    indexers = StringIndexer(inputCol = categoricalCol, outputCol = categoricalCol+ '_Index').setHandleInvalid("keep")
    stages += [indexers]
assemblerInputs = [c + "_Index" for c in categoricalColumns] + numericColsFeatures
assembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [assembler]    
lgbm = LightGBMClassifier(objective="binary", featuresCol="features", labelCol="label",learningRate=0.3,numIterations=100,numLeaves=31)
stages += [lgbm]
pipeline = Pipeline(stages = stages)
print('Running model')
pipelineModel = pipeline.fit(df)  

pmmlBuilder = PMMLBuilder(spark.sparkContext, df, pipelineModel)
pmmlBuilder.buildFile("/dbfs/tmp/pmmlModel" + ts.strftime(dateFormat) + "_test.pmml")
解决方案

方案1:使用SynapseML原生PMML导出能力(推荐)

SynapseML自带LightGBM模型的PMML导出支持,无需额外安装第三方jpmml包。直接调用模型的toPMML方法即可:

# 从训练好的Pipeline中取出LightGBM模型
lgbm_model = pipelineModel.stages[-1]
# 导出PMML文件
lgbm_model.toPMML("/dbfs/tmp/pmmlModel" + ts.strftime(dateFormat) + "_test.pmml")

若需导出整个Pipeline的PMML,需确保所有组件(StringIndexer、VectorAssembler)都支持PMML转换,可尝试用SynapseML的PMMLBuilder替代原生版本(需确保SynapseML版本>=1.0.0)。

方案2:改用原生LightGBM + lightgbm2pmml工具

绕开Spark Pipeline的兼容性问题,直接用原生LightGBM训练并导出PMML:

  1. 在Databricks中安装依赖:
%pip install lightgbm lightgbm2pmml
  1. 调整训练代码:
import lightgbm as lgb
from lightgbm2pmml import to_pmml
from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 将Spark DataFrame转为Pandas
df_pd = df.toPandas()

# 处理分类特征,和原Pipeline逻辑对齐
for col in categoricalColumns:
    df_pd[col] = LabelEncoder().fit_transform(df_pd[col].astype(str))

# 拆分特征与标签
X = df_pd[categoricalColumns + numericColsFeatures]
y = df_pd["label"]

# 训练模型
train_set = lgb.Dataset(X, label=y)
params = {
    "objective": "binary",
    "learning_rate": 0.3,
    "num_iterations": 100,
    "num_leaves": 31
}
model = lgb.train(params, train_set)

# 导出PMML
to_pmml(model, X.columns.tolist(), "/dbfs/tmp/pmmlModel" + ts.strftime(dateFormat) + "_test.pmml")

注意:需保证分类特征的编码逻辑和原Spark StringIndexer完全一致,避免预测结果偏差。

方案3:修复jpmml-sparkml-lightgbm包安装问题

若坚持使用原方案,需确保Maven包坐标正确且版本兼容:

  • 正确的Maven坐标:com.alipay.jpmml:jpmml-sparkml-lightgbm:1.5.1
  • 版本匹配规则:Spark 3.x对应1.5.x版本,Spark 2.x对应1.4.x版本
  • 在Databricks集群的库管理中添加Maven库,直接输入上述坐标即可完成安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:55:05