尝试使用JPmml将Spark中的Pipeline Model转换为Pmml时出现以下错误。

java.lang.NoSuchMethodError:org.dmg.pmml.MiningField.setUsageType(Lorg / dmg / pmml / MiningField $ UsageType;)Lorg / dmg / pmml / MiningField;

我添加了有关JPmml的所有依赖项。

// https://mvnrepository.com/artifact/org.jpmml/jpmml-sparkml
libraryDependencies + =“org.jpmml”%“jpmml-sparkml”%“1.1.6”

// https://mvnrepository.com/artifact/org.jpmml/pmml-model
libraryDependencies + =“org.jpmml”%“pmml-model”%“1.3.6”

// https://mvnrepository.com/artifact/org.jpmml/pmml-evaluator
libraryDependencies + =“org.jpmml”%“pmml-evaluator”%“1.3.5”

最佳答案

我添加了有关JPmml的所有依赖项。

您已经添加了所有依赖关系,但是您的应用程序看不到它们,因为在您的应用程序类路径中,有一个Apache Spark ML提供了org.jpmml:pmml-model:1.2.X(具有MiningField#setFieldUsage(MiningField$FieldUsage)方法),它遮盖了您的org.jpmml:pmml-model:1.3.X(具有MiningField#setUsageType(MiningField$UsageType)方法):https://issues.apache.org/jira/browse/SPARK-15526

您应该停止重新发明轮子,并使用JPMML-SparkML-Package库。此应用程序类路径/打包问题在其文档中特别介绍。

08-19 23:55