1

저는 Spark MLlib와 scala를 사용하여 간단한 코드를 작성했습니다. 그러나 코드를 실행하면 "스레드의 예외"메인 "java.lang.NoClassDefFoundError : org/apache/spark/mllib/regression/LabeledPoint"오류가 발생했습니다. . 이 오류의 원인은 무엇입니까?"NoClassDefFoundError : org/apache/spark/mllib/regression/LabeledPoint"를 사용하여 IntelliJ IDEA에서 Spark 응용 프로그램 실행이 실패하는 이유는 무엇입니까?

그리고 IDE 도구 (IntelliJ)에서 "LinearRegressionWithSGD가 더 이상 사용되지 않습니다"라고 말했습니다. 2.2.0의 스파크 버전과 2.11의 스칼라 버전을 설치했습니다. 내가 어떻게해야합니까? "LinearRegressionWithSGD"를 사용하고 싶습니다.

도와주세요.

import org.apache.spark.{SparkContext, SparkConf} 
import org.apache.spark.mllib.regression.LinearRegressionWithSGD 
import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.spark.mllib.linalg.Vectors 

import java.io.StringWriter 
import au.com.bytecode.opencsv.CSVWriter 
import scala.collection.JavaConversions._ 
import java.io.FileWriter 
import java.io.BufferedWriter 

import java.io.File 

// feature vector 
var _00h = Array(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) 

object CacheAlgoApp { 
    def main(args: Array[String]) : Unit = { 

     // Load and parse the data 
     var data = sc.textFile("test.log") 
     var operationData = data.filter(line => line.contains("operations")) 

     val adjustTime = 6 

     var parsedData = operationData.map { line => 
     var parts = line.split(' ') 
     LabeledPoint(parts(adjustTime+0).toDouble, Vectors.dense(_00h.take(24).map(_.toDouble))) 
     } 

     // Build linear regression model 
     var regression = new LinearRegressionWithSGD().setIntercept(false) 
     regression.optimizer.setNumIterations(200) 
     regression.optimizer.setStepSize(1) //0.0, 0.20999999999999963, 0.03999999999999999 
     var model00 = regression.run(parsedData) 

    }  
} 

을 다음과 같이 pom.xml 파일은 다음과 같이

코드입니다. 의존성의 문제 일 수 있습니까?

<dependencies> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.11.8</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.11</artifactId> 
     <version>2.2.0</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-mllib --> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-mllib_2.11</artifactId> 
     <version>2.1.0</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
+0

어떻게합니까 _ "하지만 코드를 실행했을 때 _"? 실행 파일을 어떻게 구축합니까? –

답변

0

TL; DRspark-mllib_2.11 의존성 provided 범위를 제거하고 다시 시작.

이유는 Spark MLlib없이 응용 프로그램의 클래스 경로에서 코드를 실행했기 때문입니다.

그러나 Spark MLlib의 LinearRegressionWithSGD을 사용하는 코드를 실행 했으므로 클래스를 CLASSPATH에서 사용할 수 있어야합니다.

때때로제대로하기 까다로울 수 있지만, 은 일반적으로 그냥 작동 할 수 있습니다하게 IntelliJ IDEA를 사용하여 스파크 코드를 실행. "

The spark-submit script in Spark’s bin directory is used to launch applications on a cluster.

그냥 를 건너 뜁니다 그렇지 않은 경우에는 높은 스파크 공식 문서의 Submitting Applications에 설명 된대로 spark-submit를 사용하여 (MLlib 또는 스파크없이 어떤 종류의) 스파크 신청서를 제출의 권장되는 방법을 사용하는 것이 좋습니다 것 클러스터에서 " 부분은 도움이되지 않습니다 (실제로는 올바르지 않습니다).

spark-mllib_2.11 코드 레벨에서 Spark MLlib를 나타내는 종속성은 provided 범위에 있으므로 Spark 응용 프로그램의 CLASSPATH에서 사용할 수 없습니다. provided 범위를 제거하고 다시 시작하십시오. 그것은 잘 작동해야합니다.

관련 문제