Soy un principiante de la chispa.Voy a construir un entorno de usar «linux + idea + sbt» ,cuando trato de inicio rápido de Chispa,tengo el problema:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/SparkConf
    at test$.main(test.scala:11)
    at test.main(test.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.SparkConf
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

Las versiones de ellos en mi disco:

sbt   = 0.13.11
jdk   = 1.8
scala = 2.10
idea  = 2016

Mi estructura de directorios:

test/
  idea/
  out/
  project/
    build.properties    
    plugins.sbt
  src/
    main/
      java/
      resources/
      scala/
      scala-2.10/
        test.scala
  target/
  assembly.sbt
  build.sbt

En construir.propiedades:

sbt.version = 0.13.8

De plugins.sbt:

logLevel := Level.Warn

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

En construir.sbt:

import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._

name := "test"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.1" % "provided"

En la asamblea.sbt:

import AssemblyKeys._ //put this at the top of the file

assemblySettings

De prueba.scala:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object test {
  def main(args: Array[String]) {
    val logFile = "/opt/spark-1.6.1-bin-hadoop2.6/README.md" //Should be some file on your system
    val conf = new SparkConf().setAppName("Test Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

¿Cómo puedo solucionar este problema.

OriginalEl autor Banehallow | 2016-06-16

3 Comentarios

  1. 13

    Dependencias con "provided" alcance sólo están disponibles durante la compilación y pruebas, y no están disponibles en tiempo de ejecución o para el embalaje. Así, en lugar de hacer un objeto test con un main, usted debe hacer una verdadera suite de prueba colocado en src/test/scala (Si no estás familiarizado con la unidad de pruebas en la Scala, te sugiero utilizar ScalaTest, por ejemplo. En primer lugar añadir una dependencia en su construcción.sbt: libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % Test y luego ir por esta tutorial de inicio rápido para implementar una simple especificación).


    Otra opción, que es bastante chapucero, en mi opinión (pero no el truco no obstante), implica la eliminación de provided ámbito de su spark-core dependencia en algunas configuraciones y se describe en respuesta a esta pregunta.

    Tengo este problema de una Scala clase src/main/scala/app/Main.scala. Todo parece bien, la aplicación se ejecuta, pero no puedo crear instancias de ScparkConf() porque estoy recibiendo también un NoClassDefFoundError. Estoy siguientes tutorial, que también utiliza provided en la dependencia menagement. Lo que no acabo de entender es que a mí me parece como si esto debería funcionar como este. Así que debo quitar provided o puedo hacer este trabajo con este indicador?

    OriginalEl autor Sergey

  2. 6

    Tuve el mismo problema esta mañana con el error. He quitado «siempre» y corrió sbt limpiar, actualizar, compilar, empaquetar, ejecutar . Yo también prueba con chispa enviar desde la línea de comandos. Pero creo que «siempre», la sobrecarga adicional en el código, el tarro es menor.

    OriginalEl autor user3485352

  3. 2

    En intelliJ versión 2018.1 hay una casilla en la configuración del llamado «Incluyen las dependencias con «Siempre» ámbito de aplicación». La comprobación de esta opción resuelto para mí.

    OriginalEl autor Jared

Dejar respuesta

Please enter your comment!
Please enter your name here