Closed liumy601 closed 2 years ago
java.lang.ClassNotFoundException: org.jpmml.converter.BaseNFeature
Your project is missing a JPMML-Converter library.
did you get this exception before?
No, because I know how to set up my projects correctly.
First, use a proper build manager such as Apache Maven. Second, declare a JPMML-SparkML library dependency, and let the build manager to collect and download JPMML-SparkML transitive dependencies as needed.
You should not be doing this manually. You're not smarter and technically more capable than Apache Maven.
yes, i have used maven, i've checked jpmml-converter library, only 1.4.5 has that class org.jpmml.converter.BaseNFeature, 1.4.10 doesn't, so it gives this error.
from the errors, it seems jpmml-xgboost library is mismatch, i used 1.4.4, which version is suitable for JPMML-SparkM 1.6.6?
thanks
If you want to know which transitive dependencies work with a particular JPMML-SparkML library version, then simply check out the correct tag, and run the mvn dependency:tree
command inside the main module.
For JPMML-SparkML version 1.6.6, do the following:
$ git clone https://github.com/jpmml/jpmml-sparkml.git
$ cd jpmml-sparkml
$ git checkout 1.6.6
$ mvn dependency:tree
The report (omitted some irrelevant parts):
[INFO] +- com.beust:jcommander:jar:1.72:compile
[INFO] +- org.apache.spark:spark-core_2.12:jar:3.0.0:provided
[INFO] +- org.jpmml:jpmml-converter:jar:1.4.10:compile
[INFO] | +- com.google.guava:guava:jar:21.0:compile
[INFO] | +- org.jpmml:pmml-model:jar:1.5.16:compile
[INFO] | | \- org.jpmml:pmml-agent:jar:1.5.16:compile
[INFO] | \- org.jpmml:pmml-model-metro:jar:1.5.16:compile
[INFO] +- junit:junit:jar:4.13.2:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.apache.hadoop:hadoop-client:jar:2.7.4:test
[INFO] \- org.jpmml:pmml-evaluator-testing:jar:1.5.16:test
[INFO] +- org.jpmml:pmml-evaluator:jar:1.5.16:test
[INFO] +- org.jpmml:pmml-evaluator-extension:jar:1.5.16:test
[INFO] +- org.jpmml:pmml-evaluator-kryo:jar:1.5.16:test
[INFO] | +- org.jpmml:pmml-model-kryo:jar:1.5.16:test
[INFO] | | \- com.esotericsoftware:kryo:jar:5.2.2-SNAPSHOT:test (version selected from constraint [5.0.0,))
[INFO] | | \- com.esotericsoftware:reflectasm:jar:1.11.9:test
[INFO] | \- de.javakaffee:kryo-serializers:jar:0.45:test
[INFO] +- org.jpmml:pmml-evaluator-metro:jar:1.5.16:test
[INFO] \- org.jpmml:pmml-evaluator-moxy:jar:1.5.16:test
[INFO] \- org.jpmml:pmml-model-moxy:jar:1.5.16:test
[INFO] \- org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.7.9:test (version selected from constraint [2.7.0,2.7.9])
[INFO] \- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.7.9:test
[INFO] \- org.eclipse.persistence:org.eclipse.persistence.asm:jar:9.1.0:test
The above report says black-on-white that you MUST use JPMML-Converter 1.4.10.
If you use some other version, then that's your (not JPMML-SparkML) problem.
yes, i have used maven, i've checked jpmml-converter library, only 1.4.5 has that class org.jpmml.converter.BaseNFeature, 1.4.10 doesn't, so it gives this error.
That's a new classpath conflict there, completely separate from the JPMML-SparkML project.
In brief, you're again trying to mix a totally arbitrary version of the JPMML-XGBoost library with JPMML-SparkML and JPMML-Converter library versions.
You need to use an JPMML-XGBoost library version that is compatible with JPMML-Converter version 1.4.10.
After i upgrade jpmml-xgboost version to 1.5.6, that error is fixed and pmml is exported successfuly.
Hi vruusmann,
As https://github.com/jpmml/jpmml-sparkml/issues/119, following your exception, i removed all other pmml libraries and only depend on JPMML-SparkML version 1.6.6 library, i get this error:
i remembered i got this error before, so i exclude these poms from jpmml-sparkml and depend on seperate low version libraries like jpmml-converter 1.4.5. did you get this exception before?