我试图在本地运行和测试amazondequ库,但是对于各种示例,我反复得到类notfound错误。精确误差
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.amazon的示例中给出的代码。deequ:deequ:1.0.4
我也试过使用sparkshell-jars,试过一行一行地运行,但仍然得到相同的结果
2条答案
按热度按时间cbwuti441#
这个问题与deequ无关,但可能是由错误的scala版本引起的。deequ目前只支持scala 2.11。请确保您使用的是正确的版本。
有关noclassdeffounderror:scala/product$class的更多详细信息,请参见此答案。
dy2hfwbg2#
您使用的deequ版本不适用于使用scala2.12编译的spark3.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
(很遗憾,我们不能使用--packages
因为maven中的构建问题)p、 最好抓取最新的spark->3.0.1-预览版发布得太久了