我一直在使用Spark MLlib和scala编写一个简单的代码。 但是,当我运行代码时,我收到错误“线程中的异常”主“java.lang.NoClassDefFoundError:org / apache / spark / mllib / regression / LabeledPoint” 。是什么导致了这个错误?
IDE工具(IntelliJ)告诉我“LinearRegressionWithSGD已被弃用” 我安装了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>
答案 0 :(得分:1)
tl; dr 删除provided
依赖关系的spark-mllib_2.11
范围并重新开始。
异常的原因是您在应用程序的类路径上运行了没有Spark MLlib的代码。
但是,您运行代码时,该类使用Spark MLlib&#39; LinearRegressionWithSGD
,因此要求该类在CLASSPATH上可用。
使用Intellij IDEA执行Spark代码有时很难做到正确,但通常才有效。如果没有,强烈建议使用Spark官方文档中描述的使用spark-submit
提交Spark应用程序(使用或不使用Spark MLlib的任何类型)的推荐方式spark-submit
{3}}:
Spark的bin目录中的
spark-mllib_2.11
脚本用于在集群上启动应用程序。
在群集&#34; 部分跳过&#34;因为这里没有任何帮助(实际上是不正确的)。
在代码级别表示Spark MLlib的 provided
依赖项位于provided
范围内,因此在您的Spark应用程序的CLASSPATH中不可用。删除DocumentBuilderFactory fact= DocumentBuilderFactory.newInstance();
fact.setNamespaceAware(true);
fact.setFeature("http://xml.org/sax/features/validation", true);
fact.setFeature("http://apache.org/xml/features/validation/schema", true);
fact.setFeature("http://apache.org/xml/features/validation" +
"/schema-full-checking", true);
DocumentBuilder docBuilder=fact.newDocumentBuilder();
Document doc = docBuilder.parse(new File(fileName));
doc.setXmlStandalone(true);
Element rootElm=doc.getDocumentElement();
Element settingElm=(Element) rootElm.getElementsByTagName("ABC").item(0);
NamedNodeMap settingAttr=settingElm.getAttributes();
Node nod=settingAttr.getNamedItem(attribute);
if(nod==null){
}
else{
nod.setTextContent(value);
}
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
DOMSource source=new DOMSource(doc);
StreamResult result=new StreamResult(new File(fileName));
transformer.transform(source, result);
范围并重新开始。它应该可以正常工作。