2016-02-09 231 views
1

我正在嘗試使用sbt程序集來構建一個發送到spark-submit的胖罐子。但是,我似乎無法獲得正確的構建過程。sbt-assembly不包括依賴關係

我當前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產生一個罐子。然而,提交罐子後引發提交 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世界來說相對較新,所以任何幫助都將不勝感激!

+0

可能的重複? http://stackoverflow.com/questions/28459333/how-to-build-an-uber-jar-fat-jar-using-sbt-within-intellij-idea看看你的建議是否適用於你 – jm0

+0

錯誤isn' t完全一樣,我的依賴沒有被包含在我的JAR中,但是沒有提交JAR來引發它自身的問題。 – vkuo

+0

當你運行'assemblyPackageDependency'時,你應該得到一個名爲'MyAppName-assembly-1.0-deps.jar'的jar。這將包含你的代價。 – mfirry

回答

0

我有類似的問題。我結束了節能lib目錄下的罐子,然後在assembly.sbt加:

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