Apache Spark无法找到类

时间:2017-02-12 11:38:19

标签: java scala apache-spark intellij-idea

我尝试使用apache sparkscala sbt一起开发独立应用 我一次又一次地收到这个错误。

  

线程中的异常" main" java.lang.NoClassDefFoundError:org / apache / spark / SparkConf       在AuctionsApp $ .main(AuctionsApp.scala:5)

以下是代码段。

import org.apache.spark.SparkConf

object AuctionsApp {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("AuctionsApp")
    println(conf)
  }
}

build.sbt档案

name := "AuctionsApp"

version := "1.0"

scalaVersion := "2.10.5"

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.2.0-cdh5.3.2" % "provided"


resolvers += "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/"

我可以通过按下命令导航到SparkConf文件并单击import语句中的类名,意味着它与其他代码一起驻留在那里。

项目构建也很成功。

感谢任何帮助。

PS。使用IntelliJ Idea CE版本2016.3

1 个答案:

答案 0 :(得分:2)

请注意,在SBT中,您指定provided,这意味着在应用程序启动时,假定包含该类的JAR存在于类路径中,这在本地调试时并非如此。

为了解决这个问题,我们创建了一个额外的项目,仅用于本地调试Spark。首先,我们在项目定义之外声明Spark的依赖项:

lazy val sparkDeps = Seq(
  "org.apache.spark" %% "spark-core" % "1.2.0-cdh5.3.2"
)

然后我们创建新项目,该项目依赖于我们的主项目和map而不是Sparks依赖项,并将compile注释添加到模块中:

lazy val sparkProject = 
  project in file("spark-project")
  .settings(
   // Add your settings and such
  )

lazy val sparkDebugger = project in file("spark-debugger")
  .dependsOn(sparkProject)
  .settings(
    libraryDependencies ++= sparkDeps.map(_ % "compile")
)

当我们想在本地调试Spark时,我们从Debug Configuration窗口的sparkDebugger项目中加载main方法:

Spark Debug Configuration