调用spark-submit时,JodaTime会出现scala和spark问题

时间:2015-09-04 23:22:25

标签: scala apache-spark jodatime joda-convert

我在Spark scala程序中使用JodaTime时遇到问题。我在Stackoverflow中尝试了过去发布的解决方案,他们似乎无法为我解决问题。

当我尝试点火提交时,会返回如下错误:

   15/09/04 17:51:57 INFO Remoting: Remoting started; listening on addresses :        
                     [akka.tcp://sparkDriver@100.100.100.81:56672]
   Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/DateTimeZone
      at com.ttams.xrkqz.GenerateCsv$.main(GenerateCsv.scala:50)
      at com.ttams.xrkqz.GenerateCsv.main(GenerateCsv.scala)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sbt package之后,似乎工作正常,我这样调用spark-submit ...... ~/spark/bin/spark-submit --class "com.ttams.xrkqz.GenerateCsv" --master local target/scala-2.10/scala-xrkqz_2.10-1.0.jar

在我的build.sbt文件中,我有

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.1"

libraryDependencies ++= Seq ("joda-time" % "joda-time" % "2.8.2",
                         "org.joda" % "joda-convert" % "1.7"
                       )

我尝试了joda-time和joda-convert的多个版本但是无法从命令行使用spark-submit。但是,当我在ide(scalaide)中运行时,它似乎有效。

如果您有任何建议或想法,请与我们联系。

1 个答案:

答案 0 :(得分:2)

您似乎缺少类路径中的依赖项。你可以做一些事情:一个是你可以用--jars参数手动添加joda时间罐来激活提交,另一个是你可以使用程序集插件并构建一个程序集jar(你可能想要标记spark-核心为“已提供”,因此它不会在您的程序集中结束),这将包含您的所有依赖项。