线程“主”java.lang.NoClassDefFoundError 中的异常:IntelliJ 中的 org/apache/spark/ml/feature/VectorAssembler

Posted

技术标签:

【中文标题】线程“主”java.lang.NoClassDefFoundError 中的异常:IntelliJ 中的 org/apache/spark/ml/feature/VectorAssembler【英文标题】:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/ml/feature/VectorAssembler in IntelliJ 【发布时间】:2018-05-20 07:08:30 【问题描述】:

我正在尝试使用 IntellijIDEA 中的线性回归在 Spark ML 中构建模型。

在拟合模型之前,我应该创建一个具有feature 列的VectorAssembler

import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors

//creating features column
val assembler = new VectorAssembler()
  .setInputCols(Array("col4","col5","col6","col7"))
  .setOutputCol("features")

线程“主”java.lang.NoClassDefFoundError 中的异常: org/apache/spark/ml/feature/VectorAssembler 在 energydata$.main(energydata.scala:35) 在 energydata.main(energydata.scala) 原因: java.lang.ClassNotFoundException: org.apache.spark.ml.feature.VectorAssembler 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 2 更多

但这会在 Intellij 中产生错误。当我在 spark-shell 中尝试相同的方法时,它可以工作。

任何人都可以建议我在这里可能出错的地方吗?

name := "hello"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.1.0"
libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.1.0"
libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.6"
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.1.0" % "provided"

【问题讨论】:

试试Invalidate Caches and Restartintellij 好吧,从 mllib 依赖项中删除“provided”关键字,显然这些类在运行时丢失了 【参考方案1】:

我在找不到其他类时遇到了类似的问题。这是因为,在 maven 依赖项中,它说“<scope>provided</scope>”。我删除了它,按下了重新加载,现在它可以工作了。

【讨论】:

【参考方案2】:

我在运行 spark 应用程序时也遇到了同样的错误。我刚刚删除 (%%"provide") spark sql的依赖范围

【讨论】:

以上是关于线程“主”java.lang.NoClassDefFoundError 中的异常:IntelliJ 中的 org/apache/spark/ml/feature/VectorAssembler的主要内容,如果未能解决你的问题,请参考以下文章

主线程啥都没做,就会等待子线程结束。这是为啥?

Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

子线程怎么不阻塞主线程

QT中UI主窗口如何与子线程相互传递参数

java 子线程 回调 主线程

C++怎么在主线程中使用子线程的数据? 比如说主线程中有一个数组,如何在子线程中调用这个数组