5

Spark对json4s 3.2.10有依赖,但是这个版本有几个bug,我需要使用3.2.11。我在 build.sbt 中添加了 json4s-native 3.2.11 依赖,一切都编译得很好。但是当我提交我的 JAR 时,它为我提供了 3.2.10。

构建.sbt

import sbt.Keys._

name := "sparkapp"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core"  % "1.3.0" % "provided"

libraryDependencies += "org.json4s" %% "json4s-native" % "3.2.11"`

插件.sbt

logLevel := Level.Warn

resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")

App1.scala

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.{Logging, SparkConf, SparkContext}
import org.apache.spark.SparkContext._

object App1 extends Logging {
  def main(args: Array[String]) = {
    val conf = new SparkConf().setAppName("App1")
    val sc = new SparkContext(conf)
    println(s"json4s version: ${org.json4s.BuildInfo.version.toString}")
  }
}

sbt 0.13.7 + sbt 组装 0.13.0 斯卡拉 2.10.4

有没有办法强制使用 3.2.11 版本?

4

3 回答 3

4

我们遇到了一个类似于 Necro 描述的问题,但是在构建程序集 jar 时从 3.2.11 降级到 3.2.10 并没有解决它。我们最终通过在作业程序集 jar 中对 3.2.11 版本进行着色来解决它(使用 Spark 1.3.1):

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("org.json4s.**" -> "shaded.json4s.@1").inAll
)
于 2015-09-25T16:21:03.797 回答
3

我在 Spark 用户邮件列表中问了同样的问题,并得到了两个如何使其工作的答案:

  1. 使用 spark.driver.userClassPathFirst=true 和 spark.executor.userClassPathFirst=true 选项,但它仅适用于 Spark 1.3,并且可能需要进行一些其他修改,例如从构建中排除 Scala 类。

  2. 用json4s 3.2.11版本重建Spark(可以在core/pom.xml中改)

两者都工作正常,我更喜欢第二个。

于 2015-03-29T09:56:08.080 回答
2

这不是您问题的答案,但是在搜索我的问题时出现了。我在 json4s 的“渲染”中的 formats.emptyValueStrategy.replaceEmpty(value) 中遇到了 NoSuchMethod 异常。原因是我使用 3.2.11 构建,但 Spark 正在链接 3.2.10。我降级到 3.2.10,我的问题就消失了。您的问题帮助我了解了发生了什么(Spark 正在链接 json4s 的冲突版本)并且我能够解决问题,所以谢谢。

于 2015-03-24T21:02:29.447 回答