2017-02-12 107 views
2

我在尝试开发独立应用程序apache spark并排scala sbt 我一次又一次地得到这个错误。Apache Spark找不到类

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/SparkConf at 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 CE2016.3

回答

2

注意,在SBT,你指定provided,这意味着包含类假定应用程序启动时,本地调试时是不是这样是存在在类路径中的JAR。

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

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

然后我们创建新的项目,这取决于我们的主要项目和map在火花的依赖,并添加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") 
) 

而当我们要调试星火本地,我们做我们的主要方法从sparkDebugger项目在调试配置窗口中加载了起来:

Spark Debug Configuration