sbt-assembly без зависимостей

Я пытаюсь создать толстую банку для отправки в spark-submit с помощью сборки sbt. Однако я не могу правильно понять процесс сборки.

Мой текущий build.sbt выглядит следующим образом

name := "MyAppName"

version := "1.0"

scalaVersion := "2.10.6"


libraryDependencies  ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.6.0" % "provided",
  "org.apache.spark" %% "spark-mllib" % "1.6.0" % "provided",
  "org.scalanlp" %% "breeze" % "0.12",
  "org.scalanlp" %% "breeze-natives" % "0.12"
)

resolvers ++= Seq(
  "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"
)

При запуске sbt-sssembly создается jar. Однако после отправки jar-файла в spark-submit spark-submit MyAppName-assembly-1.0.jar (уже указан основной класс, поэтому я предполагаю, что все в порядке, я не указываю класс), возникает следующее исключение:

java.lang.NoSuchMethodError: breeze.linalg.DenseVector.noOffsetOrStride()Z
at breeze.linalg.DenseVector$canDotD$.apply(DenseVector.scala:629)
at breeze.linalg.DenseVector$canDotD$.apply(DenseVector.scala:626)
at breeze.linalg.ImmutableNumericOps$class.dot(NumericOps.scala:98)
at breeze.linalg.DenseVector.dot(DenseVector.scala:50)
at RunMe$.cosSimilarity(RunMe.scala:103)
at RunMe$$anonfun$4.apply(RunMe.scala:35)
at RunMe$$anonfun$4.apply(RunMe.scala:33)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at scala.collection.convert.Wrappers$IteratorWrapper.next(Wrappers.scala:30)
at org.spark-project.guava.collect.Ordering.leastOf(Ordering.java:658)
at org.apache.spark.util.collection.Utils$.takeOrdered(Utils.scala:37)
at org.apache.spark.rdd.RDD$$anonfun$takeOrdered$1$$anonfun$29.apply(RDD.scala:1377)
at org.apache.spark.rdd.RDD$$anonfun$takeOrdered$1$$anonfun$29.apply(RDD.scala:1374)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$20.apply(RDD.scala:710)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitions$1$$anonfun$apply$20.apply(RDD.scala:710)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:270)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

Я относительно новичок в мире scala и sbt, поэтому буду благодарен за любую помощь!


person vkuo    schedule 09.02.2016    source источник
comment
возможный обман? stackoverflow.com/questions/28459333/ Посмотрите, работает ли этот совет для вас   -  person jm0    schedule 09.02.2016
comment
ошибка не совсем то же самое, моя зависимость не включена в мой JAR, но нет проблем с отправкой JAR для самопроверки.   -  person vkuo    schedule 09.02.2016
comment
Когда вы запустите assemblyPackageDependency, вы должны получить банку с названием что-то вроде MyAppName-assembly-1.0-deps.jar. Это будет содержать ваши данные.   -  person mfirry    schedule 09.02.2016


Ответы (2)


Оказывается, проблема в том, что ветерок уже включен в искру. Проблема заключалась в том, что искра содержала более новую версию Breeze с методами, которых не было в моей версии.

Моя ссылка: Apache Spark - java.lang.NoSuchMethodError: breeze.linalg. Плотный вектор

person vkuo    schedule 12.02.2016

У меня была аналогичная проблема. В итоге я сохранил банку в каталоге lib, а затем в assembly.sbt добавьте:

unmanagedJars in Compile += file("lib/my.jar")
person Liza Shakury    schedule 09.02.2016