2016-09-21 6 views
1

hereのように、ScalaオブジェクトからJSON Stringを作成しようとしています。Scala/Spark:NoClassDefFoundError:net/liftweb/json/Formats

私は次のコードを持っている:

import scala.collection.mutable._ 
import net.liftweb.json._ 
import net.liftweb.json.Serialization.write 

case class Person(name: String, address: Address) 
case class Address(city: String, state: String) 

object LiftJsonTest extends App { 

    val p = Person("Alvin Alexander", Address("Talkeetna", "AK")) 

    // create a JSON string from the Person, then print it 
    implicit val formats = DefaultFormats 
    val jsonString = write(p) 
    println(jsonString) 

} 

マイbuild.sbtファイルには以下が含まれています。

libraryDependencies += "net.liftweb" %% "lift-json" % "2.5+" 

私はsbt packageでビルドする場合、それは成功です。しかし

、私はスパークジョブとしてそれを実行しようとすると、次のように:

spark-submit \ 
    --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0,net.liftweb:lift-json:2.5+ \ 
    --class "com.foo.MyClass" \ 
    --master local[4] \ 
    target/scala-2.10/my-app_2.10-0.0.1.jar 

私はこのエラーを取得する:

Exception in thread "main" java.lang.RuntimeException: [unresolved dependency: net.liftweb#lift-json;2.5+: not found] 
    at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1068) 
    at org.apache.spark.deploy.SparkSubmit$.prepareSubmitEnvironment(SparkSubmit.scala:287) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:154) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

は、私はここで間違って何をしているのですか?私のpackages引数のnet.liftweb:lift-json:2.5+は間違っていますか? build.sbtにリゾルバを追加する必要がありますか?あなたのbuild.sbt

答えて

1

Users may also include any other dependencies by supplying a comma-delimited list of maven coordinates with --packages.

2.5+Ivy version matcher構文ではなく、Mavenの座標のために必要な実際の成果物のバージョンです。​​は明らかにIvyを解決に使用していません(もし私がそれをしたら驚くかもしれません;新しい依存バージョンが公開されたためにアプリケーションが突然動作を停止する可能性があります)。したがって、あなたのケースではどのバージョンが解決するかを知る必要があります。 https://github.com/jrudolph/sbt-dependency-graphを使用してください(またはshow dependencyClasspathで見つけようとしています)。

+0

ここで最も良い解決策は、2.6.3のlift-jsonの最新リリース版を使用することです。 –