简体   繁体   English

sbt-assembly不包括依赖项

[英]sbt-assembly not including dependencies

I am trying to build a fat jar to send to spark-submit using sbt assembly. 我正在尝试构建一个胖罐子,以使用sbt程序集发送到spark-submit。 However, I cannot seem to get the build process right. 但是,我似乎无法正确完成构建过程。

My current build.sbt is as follows 我当前的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/"
)

Running sbt-sssembly produces a jar. 运行sbt-sssembly会产生一个jar。 However, after submitting the jar to spark-submit spark-submit MyAppName-assembly-1.0.jar (there's already a main class specified so I'm assuming its ok I don't specify a class), the following exception gets thrown: 但是,在将jar提交到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)

I'm relatively new to the world of scala and sbt, so any help would be greatly appreciated! 我对scala和sbt领域还比较陌生,因此任何帮助将不胜感激!

So it turns out the issue is that breeze is already included in spark. 事实证明,问题在于微风已经包含在spark中。 The issue was that spark contained a newer Breeze version with methods that my version didn't have. 问题是spark包含一个较新的Breeze版本,其版本没有我的版本所具有的方法。

My reference: Apache Spark - java.lang.NoSuchMethodError: breeze.linalg.DenseVector 我的参考: Apache Spark-java.lang.NoSuchMethodError:breeze.linalg.DenseVector

I had a similar problem. 我有一个类似的问题。 I ended up saving the jar under lib directory then in assembly.sbt add : 我最终将jar保存在lib目录下,然后在assembly.sbt add中添加:

unmanagedJars in Compile += file("lib/my.jar")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM