2017-02-12 87 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