如何处理SBT上的运行时依赖冲突?

时间:2015-10-20 00:55:58

标签: scala apache-spark sbt runtime-error sbt-assembly

让我们把它放在上下文中。

我在更广泛的程序(Spark / Scala)中运行了一行代码

   val dateGroupKVpair: RDD[(String, Iterable[Option[stockPriceInfo]])] =
      stockDataFilteredRDD.keyBy(x =>
        x.get.ticker + "|" + x.get.dateTime.split("@")(0).split("-")(0) //year
           + x.get.dateTime.split("@")(0).split("-")(1) //month
          + x.get.dateTime.split("@")(0).split("-")(2)).groupByKey.sortBy(_._1, false)

此行导致以下异常

15/10/19 19:33:22 INFO impl.AMRMClientImpl: Waiting for application to be successfully unregistered.
Exception in thread "Driver" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:162)
Caused by: java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD$
        at Job$.main(Job.scala:55)
        at Job.main(Job.scala)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: org.apache.spark.rdd.RDD$
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 7 more
15/10/19 19:33:22 INFO yarn.ApplicationMaster$$anon$1: Invoking sc stop from shutdown hook

在我的build.sbt文件中,我有org / apache / spark / rdd / RDD的依赖项 - 与jar_home中的版本相同。

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.1.0-cdh5.2.1" **intransitive()**

libraryDependencies += "org.apache.spark" % "spark-assembly_2.10" % "1.3.0-cdh5.4.0" **intransitive()**

我知道 intransitive()用于添加仅用于编译的依赖项,并允许jar_home中的jar用于执行。代替不及物(),我也使用"编译" &安培; "提供" ..但仍然抛出相同的例外。我做了一些研究,并且建议使用分片 - 当然假设它是依赖性冲突,但我使用的SBT 13x不支持分片策略。另一种是将我的应用程序修改为 取决于Spark所使用的第三方库的相同版本。我确信我也做到了。

所以我现在没有选择权。你能帮我解决一下吗?

0 个答案:

没有答案