2015-04-08 7 views
5

Ich schrieb ein Spark-Programm mit Scala, aber wenn ich "Spark-Submit" verwenden, um mein Projekt einzureichen, Ich habe die java.lang.ClassNotFoundException getroffen.java.lang.ClassNotFoundException, wenn ich "Spark-Submit" mit einem neuen Klassennamen anstelle von "SimpleApp",

meine .sbt Datei:

name:="Spark Project" 

version:="1.0" 

scalaVersion:="2.10.5" 

libraryDependencies+="org.apache.spark" %% "spark-core" % "1.3.0" 

meine .scala Datei Name ist SparkProject.scala und darin Namen des Objekts ist zu SparkProject.

/* SparkProject.scala */ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 

object SparkProject { 
    def main(args: Array[String]) { 
    val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system 
    val conf = new SparkConf().setAppName("Simple 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)) 
    } 
} 

mein Befehl Projekt einzureichen ist:

spark-submit --class "SparkProject" --master local[12] target/scala-2.10/spark-project_2.10-1.0.jar 

Wer weiß, wie diese zu lösen? Endlich was mich verwirren lässt ist, wenn ich das Beispiel hier versuche [http://spark.apache.org/docs/latest/quick-start.html],it läuft gut.Aber wenn ich ein neues Projekt bilde und abschicke geht es schief. Jede Hilfe wird sehr geschätzt.

+5

Ich denke, Sie fehlen der 'Paketname' in der Klasse Name in Ihrem Senden Befehl. Ich nehme an, in Ihrem Projekt hat Ihre SparkProject.scala-Datei etwas wie 'package com.example' als erste Zeile. Wenn es ... ist, bedeutet dies, dass der vollständig qualifizierte Name Ihrer Klasse "com" lautet.Beispiel.SparkProject', so müssen Sie '- class" com.example.SparkProject "' verwenden. –

+0

@SarveshKumarSingh. Ja! Du hast Recht, das ist genau das Richtige, was ich bedanke. Vielen Dank. – zhang

+1

Ihr könnt das vielleicht als eine Antwort verwenden, um zu vermeiden, dass diese als "unbeantwortet" für andere gehalten wird, die Hilfe suchen ;-) –

Antwort

0

Das Entfernen des Paketnamens funktioniert für mich.

5

Das Hinzufügen des Paketnamens funktionierte für mich.

Mein Code ist zu einfach:

package spark.wordcount 

/* SimpleApp.scala */ 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.SparkConf 

object WordCount { 
    def main(args: Array[String]) { 
    val infile = "/input" // Should be some file on your system 
    val conf = new SparkConf().setAppName("word count") 
    val sc = new SparkContext(conf) 
    val indata = sc.textFile(infile, 2).cache() 
    val words = indata.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey((a,b) => (a+b)) 
    words.saveAsTextFile("/output") 
    println("All words are counted!") 
    } 
} 

Ich versuchte Funken vorlegen wie dies auszuführen: [root @ sparkmaster bin] # ./spark-submit --Klasse spark.wordcount.WordCount/opt /spark-wordcount-in-scala.jar und es lief erfolgreich.

0

Ich bekam den gleichen Fehler beim Ausführen von Spark auf Windows und Gebäude mit sbt.

Ich hatte nicht die Zeile "Paket xxx" (z. B. Paket spark.wordcount) im Code. Wenn Sie keine Erwähnung von „Paket xxx“ haben in Ihrem Code dann die Ausführung des Befehls

spark-submit --class "SparkProject" --master local[12] target/scala-2.10/spark-project_2.10-1.0.jar 

sollte von @SarveshKumarSingh im Kommentarbereich der Frage, wie erwähnt arbeiten.

Aber ich bekam den Fehler aus einem anderen Grund. Die Scale-Datei, die ich im Editor erstellt habe, war SimpleApp.scala.txt. Wenn ich es richtig gespeichert habe als SimpleApp.scala es funktionierte.

0

Meine zwei Cent,

Ich habe versucht, alle genannten Lösungen - die alle gültig sind. In meinem Fall hatte ich eine Änderung im Paketnamen nach dem Ausführen
sbt Paket
Daher habe ich den erwähnten Fehler bekommen. Beim Neukompilieren, d. H. "$ Sbt-Paket", hat es für mich funktioniert.

0

Für andere, die noch nach einer Lösung suchen. Ich habe alle anderen Antworten versucht, aber nicht für mich gearbeitet. Es funktioniert für mich, wenn ich doppelte Anführungszeichen für den Klassennamen entferne. Sie können versuchen spark-submit --class SparkProject --master local [12]

Verwandte Themen