Ich möchte spark-coreNLP example ausführen, aber ich bekomme eine java.lang.ClassNotFoundException Fehler beim Ausführen von Spark-submit.Scala - spark-corenlp - java.lang.ClassNotFoundException
Hier ist der Scala-Code aus dem Github-Beispiel, den ich in ein Objekt einfüge, und einen SparkContext definiert habe.
analyzer.Sentiment.scala:
package analyzer
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.sql.functions._
import com.databricks.spark.corenlp.functions._
import sqlContext.implicits._
object Sentiment {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Sentiment")
val sc = new SparkContext(conf)
val input = Seq(
(1, "<xml>Stanford University is located in California. It is a great university.</xml>")
).toDF("id", "text")
val output = input
.select(cleanxml('text).as('doc))
.select(explode(ssplit('doc)).as('sen))
.select('sen, tokenize('sen).as('words), ner('sen).as('nerTags), sentiment('sen).as('sentiment))
output.show(truncate = false)
}
}
ich die build.sbt durch Funken coreNLP vorgesehen bin mit - ich modifiziert nur die scalaVersion und sparkVerison zu meinem eigenen.
version := "1.0"
scalaVersion := "2.11.8"
initialize := {
val _ = initialize.value
val required = VersionNumber("1.8")
val current = VersionNumber(sys.props("java.specification.version"))
assert(VersionNumber.Strict.isCompatible(current, required), s"Java $required required.")
}
sparkVersion := "1.5.2"
// change the value below to change the directory where your zip artifact will be created
spDistDirectory := target.value
sparkComponents += "mllib"
spName := "databricks/spark-corenlp"
licenses := Seq("GPL-3.0" -> url("http://opensource.org/licenses/GPL-3.0"))
resolvers += Resolver.mavenLocal
libraryDependencies ++= Seq(
"edu.stanford.nlp" % "stanford-corenlp" % "3.6.0",
"edu.stanford.nlp" % "stanford-corenlp" % "3.6.0" classifier "models",
"com.google.protobuf" % "protobuf-java" % "2.6.1"
)
Dann habe ich mein Glas durch Laufen ohne Probleme erstellt.
sbt package
Schließlich lege ich meinen Job Spark:
spark-submit --class "analyzer.Sentiment" --master local[4] target/scala-2.11/sentimentanalizer_2.11-0.1-SNAPSHOT.jar
Aber ich erhalte den folgenden Fehler:
java.lang.ClassNotFoundException: analyzer.Sentiment
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:173)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:641)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:120)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Meine Datei Sentiment.scala ist Correclty in einem Paket befindet namens " Analysator ".
$ find .
./src
./src/analyzer
./src/analyzer/Sentiment.scala
./src/com
./src/com/databricks
./src/com/databricks/spark
./src/com/databricks/spark/corenlp
./src/com/databricks/spark/corenlp/CoreNLP.scala
./src/com/databricks/spark/corenlp/functions.scala
./src/com/databricks/spark/corenlp/StanfordCoreNLPWrapper.scala
Als ich das SimpleApp Beispiel aus dem Spark Quick Start lief, bemerkte ich, dass MySimpleProject/bin/eine SimpleApp.class enthalten. MySentimentProject/bin ist leer. Also habe ich versucht, mein Projekt zu säubern (ich benutze Eclipse für Scala).
Ich denke, es ist, weil ich Sentiment.class generieren muss, aber ich weiß nicht, wie es geht - es wurde automatisch mit SimpleApp.scala getan, und wenn es mit Eclipse Scala laufen/bauen, es stürzt ab.
Ich sehe nicht, 'Paket Analysator' zu Beginn des Sentiment.scala. Es ist nicht genug, in einem Verzeichnis namens "Analyzer" zu sein, da Scala Ihnen erlaubt, Dateinamen und Verzeichnisse von Klassen und Paketen zu entkoppeln. –
Ich habe 'Paket-Analysator' am Anfang von Sentiment.scala hinzugefügt. ohne Wirkung. Ich änderte auch meine Version von Scala von 2.11 zu 2.10.6, um dieselbe Konfiguration als Funken-corenlp zu haben, ohne Effekt. –