2

我在 spark scala 程序中使用 JodaTime 时遇到问题。我尝试了过去在 Stackoverflow 中发布的解决方案,但它们似乎并没有为我解决问题。

当我尝试 spark-submit 时,它会返回如下错误:

   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) 中运行时,它似乎可以工作。

如果您有任何建议或想法,请告诉我。

4

1 回答 1

2

您似乎缺少类路径中的依赖项。您可以做几件事:一是您可以手动添加 joda time jar 以使用 --jars 参数触发提交,另一个是您可以使用程序集插件并构建一个程序集 jar(您可能想要标记 spark-核心作为“提供”,因此它不会最终出现在您的程序集中),它将具有您的所有依赖项。

于 2015-09-04T23:56:59.657 回答