我在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)中运行时,它似乎有效。
如果您有任何建议或想法,请与我们联系。
答案 0 :(得分:2)
您似乎缺少类路径中的依赖项。你可以做一些事情:一个是你可以用--jars参数手动添加joda时间罐来激活提交,另一个是你可以使用程序集插件并构建一个程序集jar(你可能想要标记spark-核心为“已提供”,因此它不会在您的程序集中结束),这将包含您的所有依赖项。