Scala Spark上下文创建错误
在尝试从我的应用程序创建spark上下文时,我遇到以下一组错误Scala Spark上下文创建错误,scala,apache-spark,sbt,Scala,Apache Spark,Sbt,在尝试从我的应用程序创建spark上下文时,我遇到以下一组错误 Exception in thread "main" java.lang.NoClassDefFoundError: scala/Product$class at org.apache.spark.SparkConf$DeprecatedConfig.<init>(SparkConf.scala:723) at org.apache.spark.SparkConf$.<init>
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Product$class
at org.apache.spark.SparkConf$DeprecatedConfig.<init>(SparkConf.scala:723)
at org.apache.spark.SparkConf$.<init>(SparkConf.scala:571)
at org.apache.spark.SparkConf$.<clinit>(SparkConf.scala)
at org.apache.spark.SparkConf.set(SparkConf.scala:92)
at org.apache.spark.SparkConf.set(SparkConf.scala:81)
at org.apache.spark.SparkConf.setAppName(SparkConf.scala:118)
at sparkEnvironment$.<init>(Ticket.scala:33)
at sparkEnvironment$.<clinit>(Ticket.scala)
at Ticket$.main(Ticket.scala:40)
at Ticket.main(Ticket.scala)
Caused by: java.lang.ClassNotFoundException: scala.Product$class
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more
我尝试在其中创建上下文的片段如下:
object sparkEnvironment {
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val conf : SparkConf = new SparkConf().setAppName("Ticketing").setMaster("local[2]")
val sc = new SparkContext(conf)
}
object Ticket {
def main(args: Array[String]): Unit = {
println(sc)
}
}
默认情况下,Spark 2.2.0是为使用Scala 2.11而构建和分发的。 要用Scala编写应用程序,您需要使用兼容的Scala版本(例如2.11.X)。
您的scala版本是2.12.X。这就是它抛出异常的原因。在main方法中定义sparkContext,你应该会没事。不,也不行。事实上,我的问题是,Spark上下文在Spark Shell中创建时没有任何错误,并运行代码,但在应用程序(Spark上下文)中创建时,它抛出异常。添加在您的sbt依赖项中提供的内容,如@TheSharek中所述,我以前有过类似的查找错误,请尝试将上下文的创建移动到主方法外部,但移动到
Ticker
对象内部,然后查看它是否有效。
object sparkEnvironment {
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val conf : SparkConf = new SparkConf().setAppName("Ticketing").setMaster("local[2]")
val sc = new SparkContext(conf)
}
object Ticket {
def main(args: Array[String]): Unit = {
println(sc)
}
}