idée sbt java.lang.NoClassDefFoundError: org/apache/spark/SparkConf
Je suis un débutant de la spark.J'ai créer un environnement d'utilisation "linux + idée + sbt" ,quand je tente le démarrage rapide de la Spark,j'ai un problème:
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
Les versions d'eux dans mon disque:
sbt = 0.13.11
jdk = 1.8
scala = 2.10
idea = 2016
Ma structure de répertoire:
test/
idea/
out/
project/
build.properties
plugins.sbt
src/
main/
java/
resources/
scala/
scala-2.10/
test.scala
target/
assembly.sbt
build.sbt
Dans la construction.propriétés:
sbt.version = 0.13.8
Dans les plugins.sbt:
logLevel := Level.Warn
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
Dans la construction.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"
Dans l'assemblée.sbt:
import AssemblyKeys._ //put this at the top of the file
assemblySettings
Dans l'essai.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))
}
}
Comment puis-je résoudre ce problème.
OriginalL'auteur Banehallow | 2016-06-16
Vous devez vous connecter pour publier un commentaire.
Dépendances avec
"provided"
champ d'application ne sont disponibles que lors de la compilation et de test, et ne sont pas disponibles au moment de l'exécution ou de l'emballage. Donc, au lieu de faire un objettest
avec unmain
, vous devriez faire un test de suite placé danssrc/test/scala
(Si vous n'êtes pas familier avec les tests unitaires en Scala, je vous suggère d'utiliser ScalaTest, par exemple. Tout d'abord ajouter une dépendance sur elle dans votre construction.sbt:libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % Test
et puis aller pour cette tutoriel de démarrage rapide à mettre en œuvre un simple spec).Une autre option, qui est tout à fait hacky, à mon avis (mais le truc, néanmoins), consiste à enlever
provided
portée de votrespark-core
dépendance dans certaines configurations, et est décrit dans la accepté de répondre à cette question.src/main/scala/app/Main.scala
. Tout semble parfait, l'application est exécutée, mais je ne peut pas instancierScparkConf()
parce que je suis aussi unNoClassDefFoundError
. Je suis en suivant ce tutoriel qui utilise égalementprovided
dans la dépendance menagement. Ce que je ne comprends pas très bien, c'est que pour moi, il semble comme si cela devrait fonctionner comme ça. Dois-je donc supprimerprovided
ou puis-je faire ce travail, même avec ce drapeau?OriginalL'auteur Sergey
J'ai eu le même problème ce matin avec l'erreur fournie. J'ai supprimé le "prévu" et a couru sbt propre, recharger, de compiler, d'emballage, de s'exécuter . J'ai aussi tester à l'aide de bougies de soumettre en ligne de commande. Mais je pense que "prévu", les frais généraux supplémentaires sur le code, le pot est de moins en moins.
OriginalL'auteur user3485352
À l'ide, version 2018.1 il y a une case à cocher dans la configuration d'exécution appelé "Inclure les dépendances avec "Fourni" champ d'application". En cochant cette option résolu pour moi.
OriginalL'auteur Jared