我想在我使用sbt作爲構建工具的Spark項目(斯卡拉)中使用joda的DateTimeFormat,並且當我嘗試運行它時給它一個java.lang.NoClassDefFoundError作爲獨立的應用程序。這似乎很奇怪我,因爲我沒有得到任何錯誤,當我在控制檯玩它,但是當我嘗試使用NoClassDefFoundError for joda DateTimeFormat
Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/format/DateTimeFormat
at com.bdcoe.poc.spark.analytics.Driver$.main(Driver.scala:35)
at com.bdcoe.poc.spark.analytics.Driver.main(Driver.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:292)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.joda.time.format.DateTimeFormat
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 9 more
運行它作爲一個應用程序,它錯誤,這是我的build.sbt文件,其位於項目的根目錄:
import AssemblyKeys._
import net.virtualvoid.sbt.graph.Plugin.graphSettings
organization := "com.bdcoe.poc"
name := "spark-analytics"
scalaVersion := "2.10.4"
resolvers ++= Seq(
"Local Maven" at Path.userHome.asFile.toURI.toURL + ".m2/repository"
)
libraryDependencies ++= {
val slf4jVersion = "1.7.7"
Seq(
"org.apache.spark" %% "spark-core" % "1.0.0",
"com.github.nscala-time" %% "nscala-time" % "1.2.0",
"org.scalatest" %% "scalatest" % "2.0" % "test",
"org.slf4j" % "slf4j-api" % slf4jVersion % "provided",
"org.slf4j" % "slf4j-nop" % slf4jVersion % "test",
"joda-time" % "joda-time" % "2.2",
"org.joda" % "joda-convert" % "1.2"
)
}
這裏是喬達我的導入/用法:
import org.joda.time.format.DateTimeFormat.{ forPattern => formatFor }
val dateTime = formatFor("YYYY-MM-dd HH:mm").parseDateTime _
val timeStamp: DateTime = dateTime(args(2))
爲什麼它可以在SBT控制檯找喬達任何建議,但不運行時作爲一個stan達隆應用程序?
你如何打包?你用什麼SBT命令或插件來打包它?你是直接運行這個類而不是一個jar嗎?你能提供一個你用來運行它的cmd嗎? –
使用java 8版本。 java 7沒有包含這個庫 – Nilesh