0

我正在尝试在本地运行和测试 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.amazon.deequ:deequ:1.0.4 的示例中给出的代码

我也尝试使用 spark-shell --jars 并尝试逐行运行但仍然得到相同的结果

4

2 回答 2

1

此问题与 deequ 无关,但可能是由错误的 Scala 版本引起的。deequ 目前仅支持 Scala 2.11。请确保您使用的是正确的版本。

有关更多详细信息,请参阅此答案NoClassDefFoundError: scala/Product$class

于 2020-11-10T09:24:28.510 回答
1

您使用的 Deequ 版本不适用于使用 Scala 2.12 编译的 Spark 3.0,因此它会导致此错误(如 Philipp 所指出的)。所以你有两种可能的解决方案:

  1. 使用与 Deequ 1.0.4 兼容的 Spark 2.4.x
  2. 使用以下命令从源代码编译 Deequ:,mvn clean install -DskipTests -Pscala-2.12 -Pspark-3.0然后您可以将其与 spark-shell 一起使用:(不幸的是,由于 Maven 中的构建问题,bin/spark-shell --jars <path-to-deequ-checkout>/target/deequ_2.12-1.1.0-SNAPSHOT.jar我们无法使用)--packages

PS 最好抢最新的 Spark -> 3.0.1 - 预览版发布太久了

于 2020-11-10T14:22:10.940 回答