Idee sbt java.lang.NoClassDefFoundError: org/apache/spark/SparkConf
Ich bin ein Anfänger der Funke.Ich Baue eine Umgebung, die Nutzung von linux + Idee + sbt" ,wenn ich versuche, das schnelle starten von Spark,ich bekomme das problem:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/SparkConf
at test$.main(test.scala:11)
at test.main(test.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.SparkConf
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
Versionen von Ihnen, der in meine Festplatte:
sbt = 0.13.11
jdk = 1.8
scala = 2.10
idea = 2016
Meine Verzeichnis Struktur:
test/
idea/
out/
project/
build.properties
plugins.sbt
src/
main/
java/
resources/
scala/
scala-2.10/
test.scala
target/
assembly.sbt
build.sbt
In bauen.Eigenschaften:
sbt.version = 0.13.8
In plugins.sbt:
logLevel := Level.Warn
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
In bauen.sbt:
import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._
name := "test"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.1" % "provided"
In der Montage.sbt:
import AssemblyKeys._ //put this at the top of the file
assemblySettings
Im test.scala:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object test {
def main(args: Array[String]) {
val logFile = "/opt/spark-1.6.1-bin-hadoop2.6/README.md" //Should be some file on your system
val conf = new SparkConf().setAppName("Test Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
Wie kann ich dieses problem lösen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abhängigkeiten mit
"provided"
Bereich sind nur verfügbar, während der Kompilierung und testen, und nicht zur Laufzeit verfügbar oder für die Verpackung. So, anstatt ein Objekttest
mit einemmain
, sollten Sie machen es zu einem eigentlichen test-suite platziert insrc/test/scala
(Wenn Sie nicht vertraut mit unit-testing in Scala, würde ich vorschlagen, zu verwenden, ScalaTest, zum Beispiel. Fügen Sie zunächst eine Abhängigkeit auf, die es in deinem build.sbt:libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % Test
und dann gehen Sie für dieses quick start tutorial zu implementieren eine einfache spec).Weitere option, die ziemlich hacky, meiner Meinung nach (aber der trick funktioniert trotzdem), beinhaltet die Entfernung
provided
Umfang von Ihremspark-core
Abhängigkeit in einigen Konfigurationen und ist beschrieben in der akzeptierten Antwort auf diese Frage.src/main/scala/app/Main.scala
. Sieht alles gut aus, die Anwendung wird ausgeführt, aber ich kann nicht instanziiertScparkConf()
denn ich bin immer auch einNoClassDefFoundError
. Ich hab folgenden dieses tutorial, die auch verwendetprovided
in die Abhängigkeit menagement. Was ich nicht ganz verstehe, ist, dass es für mich so aussieht als wenn das funktionieren sollte, wie diese. Also sollte ich zu entfernenprovided
oder kann ich diese Arbeit machen, auch wenn dieses flag gesetzt ist?In intelliJ-version 2018.1 es gibt eine checkbox in der run-Konfiguration "Enthalten Abhängigkeiten mit der "Vorgesehenen" Rahmen". Bei Aktivierung dieser option gelöst für mich.
Ich hatte dasselbe Problem heute morgen mit dem Fehler bereitgestellt. Ich entfernt "zur Verfügung gestellt", und lief sbt sauber, neu laden, kompilieren, Verpacken, ausführen . Ich habe auch den test mit Funken-reichen von der Kommandozeile aus. Aber ich denke, "vorgesehen", die zusätzlichen overhead an code, die jar weniger.