intellijidea - scala para intellij
Cómo configurar la hoja de cálculo Scala Intellij 14 para ejecutar Spark (6)
Estoy intentando crear un SparkContext en una hoja de trabajo Scala Intellij 14.
aqui estan mis dependencias
name := "LearnSpark"
version := "1.0"
scalaVersion := "2.11.7"
// for working with Spark API
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0"
Aquí está el código que ejecuto en la hoja de trabajo
import org.apache.spark.{SparkContext, SparkConf}
val conf = new SparkConf().setMaster("local").setAppName("spark-play")
val sc = new SparkContext(conf)
error
15/08/24 14:01:59 ERROR SparkContext: Error initializing SparkContext.
java.lang.ClassNotFoundException: rg.apache.spark.rpc.akka.AkkaRpcEnvFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
Cuando ejecuto Spark como aplicación independiente funciona bien. Por ejemplo
import org.apache.spark.{SparkContext, SparkConf}
// stops verbose logs
import org.apache.log4j.{Level, Logger}
object TestMain {
Logger.getLogger("org").setLevel(Level.OFF)
def main(args: Array[String]): Unit = {
//Create SparkContext
val conf = new SparkConf()
.setMaster("local[2]")
.setAppName("mySparkApp")
.set("spark.executor.memory", "1g")
.set("spark.rdd.compress", "true")
.set("spark.storage.memoryFraction", "1")
val sc = new SparkContext(conf)
val data = sc.parallelize(1 to 10000000).collect().filter(_ < 1000)
data.foreach(println)
}
}
¿Puede alguien proporcionar alguna orientación sobre dónde debería buscar resolver esta excepción?
Gracias.
A continuación se muestra mi configuración de dependencias maven, siempre funciona y estable. Por lo general escribo spark pragram y lo envío a yarn-cluster para la ejecución del cluster.
El tarro clave es $ {spark.home} /lib/spark-assembly-1.5.2 hadoop2.6.0.jar , contiene casi todas las dependencias de chispa y se incluye con cada lanzamiento de chispa. (En realidad, spark-submit distribuirá este contenedor al clúster, así que no se preocupe más de la excepción ClassNotFoundException: D)
Creo que puede cambiar su biblioteca Dependencias + = "org.apache.spark" %% "spark-core"% "1.4.0" con una configuración similar a la anterior (Maven usa systemPath para apuntar a la dependencia local del jar, creo que SBT tiene una configuración similar )
Nota: el registro de exclusiones de tarros es opcional, debido a sus conflictos con mis otros tarros.
<!--Apache Spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-assembly</artifactId>
<version>1.5.2</version>
<scope>system</scope>
<systemPath>${spark.home}/lib/spark-assembly-1.5.2-hadoop2.6.0.jar</systemPath>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.2</version>
</dependency>
De acuerdo con el sitio de Spark 1.4.0 , debe utilizar scala 2.10.x:
Spark se ejecuta en Java 6+, Python 2.6+ y R 3.1+. Para la API de Scala, Spark 1.4.0 usa Scala 2.10. Deberá usar una versión de Scala compatible (2.10.x).
EDITADO:
Cuando haga clic en "crear nuevo proyecto" en intelliJ después de seleccionar sbt project y haga clic en "siguiente", aparecerá este menú donde puede elegir la versión de scala:
EDITADO 2:
También puede utilizar este paquete de núcleo de chispa para scala 2.11.x:
libraryDependencies += "org.apache.spark" %% "spark-core_2.11" % "1.4.0"
Estaba enfrentando el mismo problema, y no pude resolverlo, aunque intenté varios intentos. En lugar de hoja de cálculo, ahora mismo estoy usando la consola de Scala , al menos mejor que nada para usar.
También encontré un problema similar con Intellij en el que SBT no resuelve las bibliotecas después de agregar las Dependencias de biblioteca en build.sbt. IDEA no está descargando las dependencias por defecto. Reiniciado el Intellij, resuelve el problema. Comience a descargar las dependencias.
Asi que,
Asegúrese de que las dependencias se descarguen en su proyecto local; de lo contrario, reinicie el IDE o active el IDE para descargar las dependencias necesarias
Asegúrese de que los repositorios se resuelvan, en caso de que no, incluya la ubicación del repositorio bajo resolución + =
Utilizo Intellij CE 2016.3, Spark 2.0.2 y ejecuto la hoja de trabajo de Scala en un modelo compatible con Eclipse, hasta ahora, la mayoría de ellos están bien ahora, solo queda un problema menor.
abra Preferencias-> escriba scala -> en Idiomas y marcos, elija Scala -> Elegir hoja de trabajo -> solo seleccione el modo de compatibilidad de eclipse o no seleccione nada.
Anteriormente, cuando seleccionaba "Ejecutar hoja de cálculo en el proceso del compilador", experimentaba muchos problemas, no solo usando Spark, también Elasticsearch. Supongo que al seleccionar "Ejecutar hoja de trabajo en el proceso del compilador", el Intellij hará una optimización complicada, agregando perezoso a la variable, etc. tal vez, lo que en alguna situación hace que la hoja de cálculo esté más bien conectada.
También me parece que a veces, cuando la clase definida en la hoja de trabajo no funciona o se comporta de manera anormal, colocar un archivo separado y compilarlo, luego ejecutarlo en la hoja de trabajo, resolverá muchos problemas.
Ya que todavía hay algunas dudas sobre si es posible ejecutar la hoja de trabajo Scala de IntelliJ IDEA con Spark y esta pregunta es la más directa, quería compartir mi captura de pantalla y una receta de estilo de libro de cocina para que el código de Spark se evalúe en la hoja de trabajo.
Estoy utilizando Spark 2.1.0 con Scala Worksheet en IntelliJ IDEA (CE 2016.3.4).
El primer paso es tener el archivo build.sbt al importar dependencias en IntelliJ. He usado el mismo simple.sbt del Inicio rápido de Spark :
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
El segundo paso es desmarcar la casilla de verificación ''Ejecutar hoja de trabajo en el proceso del compilador'' en Configuración -> Idiomas y marcos -> Scala -> Hoja de trabajo. También he probado las otras configuraciones de la hoja de trabajo y no tuvieron ningún efecto en la advertencia sobre la creación duplicada del contexto de Spark.
Aquí está la versión del código del ejemplo SimpleApp.scala en la misma guía modificada para trabajar en la Hoja de trabajo. Los parámetros master
y appName
deben configurarse en la misma appName
trabajo:
import org.apache.spark.{SparkConf, SparkContext}
val conf = new SparkConf()
conf.setMaster("local[*]")
conf.setAppName("Simple Application")
val sc = new SparkContext(conf)
val logFile = "/opt/spark-latest/README.md"
val logData = sc.textFile(logFile).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
Aquí hay una captura de pantalla de la hoja de trabajo de Scala con Spark:
ACTUALIZACIÓN para IntelliJ CE 2017.1 (Hoja de trabajo en modo REPL)
En 2017.1, Intellij introdujo el modo REPL para la hoja de trabajo. He probado el mismo código con la opción ''Usar REPL'' marcada. Para ejecutar este modo, debe dejar marcada la casilla de verificación ''Ejecutar hoja de trabajo en el proceso del compilador'' en Configuración de hoja de trabajo que he descrito anteriormente (está predeterminada).
El código funciona bien en el modo REPL de la hoja de trabajo.