Why does executing Spark application fail in IntelliJ IDEA with "NoClassDefFoundError: org/apache/spark/mllib/regression/LabeledPoint"?
Why does executing Spark application fail in IntelliJ IDEA with "NoClassDefFoundError: org/apache/spark/mllib/regression/LabeledPoint"?
我一直在使用 Spark MLlib 和 scala 编写简单的代码。
但是,当我 运行 代码时,我得到了错误 "Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/mllib/regression/LabeledPoint"
.是什么原因导致此错误?
IDE 工具 (IntelliJ) 告诉我 "LinearRegressionWithSGD is deprecated"
我安装的是2.2.0的spark版本和2.11的scala版本。
我应该做些什么?如果我想使用 "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>
tl;dr 删除 provided
范围的 spark-mllib_2.11
依赖项并重新开始。
出现异常的原因是您 运行 在应用程序的 class 路径上没有 Spark MLlib 的代码。
但是您 运行 class 使用 Spark MLlib 的 LinearRegressionWithSGD
的代码,因此需要 class 在 CLASSPATH 上可用。
使用 Intellij IDEA 执行 Spark 代码 有时 很难做到正确,但 通常 就可以了。如果没有,强烈建议按照 Spark 官方文档的 Submitting Applications:[=20 中所述,使用 spark-submit
提交 Spark 应用程序(任何类型的有或没有 Spark MLlib)的推荐方式=]
The spark-submit
script in Spark’s bin directory is used to launch applications on a cluster.
跳过 "on a cluster" 部分,因为这对这里没有帮助(实际上是不正确的)。
spark-mllib_2.11
在代码级别表示 Spark MLlib 的依赖项在 provided
范围内,因此在您的 Spark 应用程序的 CLASSPATH 中不可用。删除 provided
范围并重新开始。它应该工作正常。
我一直在使用 Spark MLlib 和 scala 编写简单的代码。 但是,当我 运行 代码时,我得到了错误 "Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/mllib/regression/LabeledPoint" .是什么原因导致此错误?
IDE 工具 (IntelliJ) 告诉我 "LinearRegressionWithSGD is deprecated" 我安装的是2.2.0的spark版本和2.11的scala版本。 我应该做些什么?如果我想使用 "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>
tl;dr 删除 provided
范围的 spark-mllib_2.11
依赖项并重新开始。
出现异常的原因是您 运行 在应用程序的 class 路径上没有 Spark MLlib 的代码。
但是您 运行 class 使用 Spark MLlib 的 LinearRegressionWithSGD
的代码,因此需要 class 在 CLASSPATH 上可用。
使用 Intellij IDEA 执行 Spark 代码 有时 很难做到正确,但 通常 就可以了。如果没有,强烈建议按照 Spark 官方文档的 Submitting Applications:[=20 中所述,使用 spark-submit
提交 Spark 应用程序(任何类型的有或没有 Spark MLlib)的推荐方式=]
The
spark-submit
script in Spark’s bin directory is used to launch applications on a cluster.
跳过 "on a cluster" 部分,因为这对这里没有帮助(实际上是不正确的)。
spark-mllib_2.11
在代码级别表示 Spark MLlib 的依赖项在 provided
范围内,因此在您的 Spark 应用程序的 CLASSPATH 中不可用。删除 provided
范围并重新开始。它应该工作正常。