Я нашел решение, и оно работает!
Проблема была в том, что около sbt package
, которая не включает все зависимые баночки в выходной бачок. Чтобы преодолеть это, я попробовал sbt-assembly
, но у меня было много ошибок «deduplicate», когда я его запускал.
В конце концов я подошел к этому сообщению в блоге, которое сделало все ясно.
http://queirozf.com/entries/creating-scala-fat-jars-for-spark-on-sbt-with-sbt-assembly-plugin
Для того, чтобы представить работу искры искрового кластер (с помощью искры подати), вам необходимо включить все зависимость (кроме Спарка самого) в Jar, в противном случае вы не будете в состоянии использовать их в своей работе.
- Создать "assembly.sbt" в/папке проекта.
- Добавьте эту строку
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")
- Затем вставьте код assemblyMergeStrategy ниже вашего build.sbt
assemblyMergeStrategy in assembly := { case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last case PathList("javax", "activation", xs @ _*) => MergeStrategy.last case PathList("org", "apache", xs @ _*) => MergeStrategy.last case PathList("com", "google", xs @ _*) => MergeStrategy.last case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last case PathList("com", "codahale", xs @ _*) => MergeStrategy.last case PathList("com", "yammer", xs @ _*) => MergeStrategy.last case "about.html" => MergeStrategy.rename case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last case "META-INF/mailcap" => MergeStrategy.last case "META-INF/mimetypes.default" => MergeStrategy.last case "plugin.properties" => MergeStrategy.last case "log4j.properties" => MergeStrategy.last case x => val oldStrategy = (assemblyMergeStrategy in assembly).value oldStrategy(x) }
И запустить sbt assembly
Теперь у вас есть большая толстая банка, который имеет все зависимости. Это может быть сотни МБ на основе зависимых библиотек. Для моего случая я использую Aws EMR, который Spark 1.6.1 уже установлен на нем. Чтобы исключить искровым ядро экспромты из кувшина твоего, вы можете использовать «при условии» ключевое слово:
"org.apache.spark" %% "spark-core" % "1.6.1" % "provided"
Вот окончательный build.sbt файл:
organization := "com.foo"
name := "FooReport"
version := "1.0"
scalaVersion := "2.10.6"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.6.1" % "provided"
,"net.liftweb" % "lift-json_2.10" % "2.6.3"
,"joda-time" % "joda-time" % "2.9.4"
)
assemblyMergeStrategy in assembly := {
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last
case PathList("javax", "activation", xs @ _*) => MergeStrategy.last
case PathList("org", "apache", xs @ _*) => MergeStrategy.last
case PathList("com", "google", xs @ _*) => MergeStrategy.last
case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last
case PathList("com", "codahale", xs @ _*) => MergeStrategy.last
case PathList("com", "yammer", xs @ _*) => MergeStrategy.last
case "about.html" => MergeStrategy.rename
case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last
case "META-INF/mailcap" => MergeStrategy.last
case "META-INF/mimetypes.default" => MergeStrategy.last
case "plugin.properties" => MergeStrategy.last
case "log4j.properties" => MergeStrategy.last
case x =>
val oldStrategy = (assemblyMergeStrategy in assembly).value
oldStrategy(x)
}