代码之家  ›  专栏  ›  技术社区  ›  vkuo

sbt程序集不包括依赖项

  •  1
  • vkuo  · 技术社区  · 9 年前

    我正在尝试构建一个胖罐子,使用sbt程序集发送到spark提交。然而,我似乎无法正确地完成构建过程。

    我的当前版本。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 ssassembly会产生一个jar。然而,在提交jar到spark提交之后 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的世界比较陌生,所以任何帮助都将非常感谢!

    2 回复  |  直到 9 年前
        1
  •  2
  •   Community CDub    7 年前

    所以事实证明,问题是微风已经包含在星火中。问题是spark包含了一个更新的Breeze版本,其方法是我的版本没有的。

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

        2
  •  0
  •   Liza Shakury    9 年前

    我也有类似的问题。我最终将jar保存在lib目录下,然后保存在assembly中。sbt添加:

    unmanagedJars in Compile += file("lib/my.jar")
    
    推荐文章