spark-coreNLP example을 실행하고 싶지만 spark-submit을 실행할 때 java.lang.ClassNotFoundException 오류가 발생합니다.스칼라 - 스파크 - corenlp - java.lang.ClassNotFoundException
여기에 github 예제의 스칼라 코드가 있습니다.이 코드는 객체에 넣고 SparkContext를 정의했습니다.
는 analyzer.Sentiment.scala :
나는 스파크 coreNLP에서 제공하는 build.sbt을 사용하고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)
}
}
는 - 나는 단지 내 자신에 scalaVersion 및 sparkVerison를 수정했습니다.
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"
)
그런 다음 문제점없이 실행하여 jar 파일을 만들었습니다.
sbt package
는 마지막으로, 스파크 내 작업을 제출
spark-submit --class "analyzer.Sentiment" --master local[4] target/scala-2.11/sentimentanalizer_2.11-0.1-SNAPSHOT.jar
을하지만, 나는 다음과 같은 오류가 발생합니다 :
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)
내 파일 Sentiment.scala이 correclty라는 이름의 패키지에 있습니다 " 분석기 ". 나는 Spark Quick Start에서 SimpleApp 예제를 실행하면
$ 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
, 나는 MySimpleProject이/빈/A SimpleApp.class 포함 된 것으로 나타났습니다. MySentimentProject/bin이 비어 있습니다. 그래서 나는 프로젝트를 청소하려고했다. (나는 Scala 용 Eclipse를 사용하고있다.)
Sentiment.class를 생성해야하기 때문에 생각합니다. 어떻게해야할지 모르겠습니다. SimpleApp.scala를 사용하여 자동으로 수행되었으며, Eclipse Scala로 실행/빌드 할 때 충돌.
에 소스 코드를 확인하십시오. Scala는 클래스와 패키지에서 파일 이름과 디렉토리를 분리 할 수 있기 때문에 "analyzer"라는 디렉토리에 있어야 충분하지 않습니다. –
Sentiment.scala 시작 부분에 'package analyzer'를 추가했습니다. 아무런 효과가 없다. 또한 스칼라 버전을 2.11에서 2.10.6으로 변경하여 spark-corenlp와 동일한 구성으로 변경하지 않았습니다. –