首页 > 解决方案 > 在 java Spark 中使用 Jackson 2.9.9

问题描述

我正在尝试使用 MLLIB 库(java),但我的依赖项之一使用 Jackson 2.9.9。我注意到提出了一个拉取请求,以便将主分支的依赖项升级到这个特定版本。现在我想使用这个 master 分支,所以我使用./dev/make-distribution.sh. 但不确定要将哪些 jar 包复制到我的项目中。我试图复制所有 3.0.0 快照,但最终class file for scala.Cloneable not found在我的 java 程序中得到了一个。

我还做了一个./build/mvn -DskipTests install在 ~/.m2 下安装 SNAPSHOT 依赖项的操作。

我将它们添加到 gradle 构建文件中

    // https://mvnrepository.com/artifact/org.apache.spark/spark-core
    compile group: 'org.apache.spark', name: 'spark-core_2.12', version: '3.0.0-SNAPSHOT'

    // https://mvnrepository.com/artifact/org.apache.spark/spark-mllib
    compile group: 'org.apache.spark', name: 'spark-mllib_2.12', version: '3.0.0-SNAPSHOT'

但是在java 11下执行时,它抱怨:

Exception in thread "main" java.lang.NoSuchFieldError: JAVA_9
    at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:207)

由于 java 9 不再可用,我想知道如何进一步调试这个问题。我假设至少需要 java 9 但该字段不再存在?

标签: javaapache-sparkjacksonapache-spark-mllib

解决方案


我注意到在源代码 StorageUtils.scala 中,它为 JAVA_9 引入了apache common-lang3。您是否检查过 apache common-lang3 是否包含在类路径中?它通过将 commons-lang3-3.9.jar 添加到我的类路径来解决我的问题。


推荐阅读