无法在本地 运行 amazon deequ 示例
Unable to run amazon deequ examples locally
我正在尝试 运行 并在本地测试 amazon deequ 库,但我反复收到各种示例的 class 未找到错误。确切错误
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 并尝试 运行 一行一行但仍然得到相同的结果
这个问题与deequ无关,可能是Scala版本错误导致的。 deequ 目前仅支持 Scala 2.11。请确保您使用的是正确的版本。
有关详细信息,请参阅此答案NoClassDefFoundError: scala/Product$class。
您使用的 Deequ 版本不适用于使用 Scala 2.12 编译的 Spark 3.0,因此它导致了此错误(正如 Philipp 所指出的)。所以你有两个可能的解决方案:
- 使用与 Deequ 1.0.4 兼容的 Spark 2.4.x
- 使用以下命令从 sources 编译 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 - 预览版发布时间太早
我正在尝试 运行 并在本地测试 amazon deequ 库,但我反复收到各种示例的 class 未找到错误。确切错误
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 并尝试 运行 一行一行但仍然得到相同的结果
这个问题与deequ无关,可能是Scala版本错误导致的。 deequ 目前仅支持 Scala 2.11。请确保您使用的是正确的版本。
有关详细信息,请参阅此答案NoClassDefFoundError: scala/Product$class。
您使用的 Deequ 版本不适用于使用 Scala 2.12 编译的 Spark 3.0,因此它导致了此错误(正如 Philipp 所指出的)。所以你有两个可能的解决方案:
- 使用与 Deequ 1.0.4 兼容的 Spark 2.4.x
- 使用以下命令从 sources 编译 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 - 预览版发布时间太早