2017-02-12 5 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 CE версия 2016.3

ответ

2

Обратите внимание, что в СБТ, необходимо указать provided, что означает, что файл JAR, содержащий предполагается, что класс должен присутствовать на пути к классам при запуске приложения, которое не так при отладке локально.

Чтобы обойти эту проблему, мы создаем дополнительный проект, который предназначен исключительно для отладки 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") 
) 

И когда мы хотим отладить Спарк локально, мы делаем наш основной метод загрузить из sparkDebugger проекта в окне конфигурации Debug:

Spark Debug Configuration