我正试图在本地运行和测试amazon deequ库,但在各种示例中,我反复遇到找不到类的错误。精确误差
java.lang.NoClassDefFoundError: scala/Product$class
at com.amazon.deequ.profiles.ColumnProfilerRunBuilderFileOutputOptions.<init>(ColumnProfilerRunner.scala:31)
at com.amazon.deequ.profiles.ColumnProfilerRunBuilder.run(ColumnProfilerRunBuilder.scala:174)
... 47 elided
Caused by: java.lang.ClassNotFoundException: scala.Product$class
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 49 more
或
val suggestionResult = ConstraintSuggestionRunner().onData(input).addConstraintRules(Rules.DEFAULT).run()
java.lang.NoClassDefFoundError: scala/Product$class
at com.amazon.deequ.suggestions.rules.CompleteIfCompleteRule.<init>(CompleteIfCompleteRule.scala:25)
at com.amazon.deequ.suggestions.Rules$.<init>(ConstraintSuggestionRunner.scala:33)
at com.amazon.deequ.suggestions.Rules$.<clinit>(ConstraintSuggestionRunner.scala)
... 49 elided
我所遵循的代码是我使用的spark-submit--class--packages.com.aamazon.deequ:deequ:1.0.4 示例中给出的代码
我也尝试过使用sparkshell--jars,并尝试过一个接一个地运行线路,但仍然得到了相同的结果
您使用的Deequ版本不适用于使用Scala 2.12编译的Spark 3.0,因此导致了此错误(正如Philipp所指出的(。所以你有两种可能的解决方案:
- 使用与Deequ 1.0.4兼容的Spark 2.4.x
- 使用以下命令从源代码编译Deequ:
mvn clean install -DskipTests -Pscala-2.12 -Pspark-3.0
,然后您可以将其与spark shell一起使用为:bin/spark-shell --jars <path-to-deequ-checkout>/target/deequ_2.12-1.1.0-SNAPSHOT.jar
(不幸的是,由于Maven中的构建问题,我们无法使用--packages
(
p.S.最好是抓住最新的Spark->3.0.1-预览版发布太久了
这个问题与deequ无关,但可能是由错误的Scala版本引起的。deequ目前只支持Scala 2.11。请确保您使用的是正确的版本。
有关更多详细信息,请参阅此答案NoClassDefFoundError:scala/Product$class。