2015-08-24 17 views
17

Sto provando a creare uno SparkContext in un foglio di lavoro Scala di Intellij 14.Come impostare Intellij 14 Scala Worksheet per eseguire Spark

qui sono le mie dipendenze

name := "LearnSpark" 
version := "1.0" 
scalaVersion := "2.11.7" 
// for working with Spark API 
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0" 

Ecco il codice ho eseguito nel foglio di lavoro

import org.apache.spark.{SparkContext, SparkConf} 
val conf = new SparkConf().setMaster("local").setAppName("spark-play") 
val sc = new SparkContext(conf) 

errore

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) 

Quando eseguo scintilla come applicazione stand-alone funziona benissimo. Ad esempio

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) 
    } 
} 

Qualcuno può fornire indicazioni su dove dovrei cercare di risolvere questa eccezione?

Grazie.

+0

vorrei provare il forum IDEA aiuto. Ci sono numerosi bug con il loro foglio di lavoro che interagisce con ogni genere di cose. Vi consiglio solo di usarlo per il controllo di sintassi di base. – childofsoong

+0

AFAIK non è possibile - utilizzare la console di Intellij scala invece –

risposta

1

Secondo Spark 1.4.0 site si dovrebbe utilizzare Scala 2.10.x:

Spark gira su Java 6+, Python 2.6+ e R 3.1+. Per l'API Scala, Spark 1.4.0 utilizza Scala 2.10. Dovrai utilizzare una versione di Scala compatibile (2.10.x).

Modificato:

Quando si fa clic su "Crea nuovo progetto" in IntelliJ dopo aver selezionato progetto SBT e fare clic su "Avanti", questo menu apparirà in cui è possibile scegliere la versione Scala:

enter image description here

modificato 2:

È c un anche utilizzare questo pacchetto di base scintilla per Scala 2.11.x:

libraryDependencies += "org.apache.spark" %% "spark-core_2.11" % "1.4.0" 
+0

Ciao Marco, ho cambiato in 'scalaVersion: =" 2.10.4 "' e 'libraryDependencies + =" org.apache.spark "%%" spark-core " % "1.4.0" 'ma si verifica ancora l'eccezione – rburg

+0

@rburg, prova con questo link per impostare la versione intellij di scala su 2.10.x - [Come configurare Intellij per Scala 2.10] (http://stackoverflow.com/questions/ 14817388/how-to-setup-intellij-for-scala-2-10) – Marco

+0

Ho impostato la versione scala e spark come da istruzioni, ma ancora ricevo l'errore: SparkContext: errore durante l'inizializzazione di SparkContext. java.lang.ClassNotFoundException: rg.apache.spark.rpc.akka.AkkaRpcEnvFactory' – rburg

1

ero di fronte lo stesso problema, e non poteva grado di risolvere questo, però provato diversi tentativi. Invece di un foglio di lavoro, in questo momento sto usando scala console, almeno meglio di niente da usare.

-1

Anch'io ho riscontrato un problema simile con Intellij in cui le librerie non sono state risolte da SBT dopo l'aggiunta di libraryDependencies in build.sbt. IDEA non sta scaricando le dipendenze per impostazione predefinita. Riavviato Intellij, risolve il problema. inizia a scaricare le dipendenze.

Quindi,

Assicurarsi che le dipendenze vengono scaricati nel progetto locale, in caso contrario, riavviare l'IDE o innescare l'IDE per scaricare le dipendenze richieste

Assicurarsi i repository sono risolti, in caso non, includere la posizione del repository sotto resolver + =

-1

Di seguito è la configurazione di maven dependecies, funziona sempre e stabile. Di solito scrivo spark pragram e lo invio al filato cluster per il cluster running.

Il contenitore chiave è $ {spark.home} /lib/spark-assembly-1.5.2 hadoop2.6.0.jar, contiene quasi tutte le dipendenze da scintilla ed è incluso in ogni versione di scintilla. (In realtà spark-submit distribuirà questo jar al cluster, quindi non preoccuparti più ClassNotFoundException: D)

Penso che tu possa cambiare il tuo libraryDependencies + = "org.apache.spark" %% "spark-core"% " 1.4.0 " con configurazione simile precedente (Maven usa systemPath per indicare la dipendenza locale del jar, penso che SBT abbia una configurazione simile)

Nota: l'esclusione dei giare di registrazione è facoltativa, a causa dei suoi conflitti con gli altri miei vasi.

<!--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> 
3

Io uso IntelliJ CE 2016,3, Spark 2.0.2 ed eseguire scala del foglio di lavoro nel modello compatibile eclissi, fino ad ora, la maggior parte di loro sono ok ora, c'è solo problema minore sinistra.

apri Preferenze-> digita scala -> in Lingue & Framework, scegli Scala -> Scegli foglio di lavoro -> seleziona solo la modalità di compatibilità di eclissi o non seleziona nulla.

In precedenza, quando si seleziona "Esegui foglio di lavoro nel processo di compilazione", ho riscontrato molti problemi, non solo l'utilizzo di Spark, anche Elasticsearch. Immagino che quando selezioni "Esegui il foglio di lavoro nel processo del compilatore", Intellij eseguirà qualche ottimizzazione ingannevole, aggiungendo pigro alla variabile ecc. Forse, che in alcune situazioni rende il foglio di lavoro piuttosto cablato.

Inoltre, trovo che a volte quando la classe definita nel foglio di lavoro non funziona o si comporta in modo anomalo, inserire un file separato e compilarlo, quindi eseguirlo nel foglio di lavoro, risolverà un sacco di problemi.

6

Poiché ci sono ancora alcuni dubbi se è possibile eseguire IntelliJ IDEA Scala Worksheet con Spark e questa domanda è la più diretta, volevo condividere il mio screenshot e una ricetta in stile libro di cucina per ottenere il codice Spark valutato nel foglio di lavoro.

Sto utilizzando Spark 2.1.0 con Scala Worksheet in IntelliJ IDEA (CE 2016.3.4).

Il primo passaggio consiste nell'avere il file build.sbt quando si importano le dipendenze in IntelliJ. Ho usato lo stesso simple.sbt dal Spark Quick Start:

name := "Simple Project" 

version := "1.0" 

scalaVersion := "2.11.7" 

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0" 

Il secondo passo è quello di deselezionare 'Run foglio di lavoro nel processo di compilatore' opzione in Impostazioni -> Lingue e Frameworks -> Scala -> Foglio di lavoro. Ho anche testato le altre impostazioni del foglio di lavoro e non hanno avuto alcun effetto sull'avvertimento sulla creazione di un contesto Spark duplicato.

Ecco la versione del codice dall'esempio SimpleApp.scala nella stessa guida modificata per funzionare nel foglio di lavoro. I master e appName parametri devono essere definiti nello stesso foglio:

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") 

Ecco un'immagine del funzionamento Scala foglio con Spark: a screenshot of the functioning Scala Worksheet with Spark

UPDATE per IntelliJ CE 2017,1 (foglio di lavoro in modo REPL

Nel 2017.1 Intellij ha introdotto la modalità REPL per foglio di lavoro.Ho testato lo stesso codice con l'opzione 'Usa REPL' selezionata. Per eseguire questa modalità è necessario lasciare selezionata la casella di controllo "Esegui foglio di lavoro nel processo di compilazione" in Impostazioni foglio di lavoro che ho descritto sopra (è di default).

Il codice funziona correttamente in modalità REPL.

Ecco lo screenshot: Spark in IJ Scala Worksheet REPL mode

+1

La modalità REPL funziona perfettamente con me +1 – pansen

Problemi correlati