5

Spark は json4s 3.2.10 に依存していますが、このバージョンにはいくつかのバグがあり、3.2.11 を使用する必要があります。json4s-native 3.2.11 依存関係を build.sbt に追加すると、すべてが正常にコンパイルされました。しかし、JAR を spark-submit すると、3.2.10 が提供されます。

build.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"`

plugins.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-assembly 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 User Mailing List で同じ質問をしたところ、それを機能させる方法について 2 つの回答が得られました。

  1. spark.driver.userClassPathFirst=true および spark.executor.userClassPathFirst=true オプションを使用しますが、これは Spark 1.3 でのみ機能し、ビルドから Scala クラスを除外するなどの他の変更が必要になる可能性があります。

  2. json4s 3.2.11 バージョンで Spark を再ビルドします (core/pom.xml で変更できます)。

どちらも問題なく動作します。私は 2 番目の方が好みでした。

于 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 に答える