web-dev-qa-db-ja.com

Intellij 14のセットアップ方法Scala実行するワークシートSpark

Intellij 14 ScalaワークシートでSparkContextを作成しようとしています。

ここに私の依存関係があります

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

これがワークシートで実行するコードです

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

エラー

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)

Sparkをスタンドアロンアプリとして実行すると、正常に動作します。たとえば、

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

誰かがこの例外を解決するためにどこを見ればよいかについていくつかのガイダンスを提供できますか?

ありがとう。

24
rburg

IntelliJを実行することができるかどうかはまだかなりの疑問があるのでIDEA Scala Worksheet with Spark and this質問が最も直接的なものです。スクリーンショットとクックブックスタイルのレシピを共有して、ワークシートでSparkコードが評価されるようにしました。

Spark 2.1.0 with Scala IntelliJのワークシートIDEA(CE 2016.3.4))を使用しています。

最初のステップは、IntelliJに依存関係をインポートするときにbuild.sbtファイルを作成することです。 Sparkクイックスタート から同じsimple.sbtを使用しました:

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.7"

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

2番目のステップは、[設定]-> [言語とフレームワーク]-> Scala->ワークシート)の[コンパイラプロセスでワークシートを実行する]チェックボックスをオフにすることです。他のワークシート設定もテストしましたが、重複に関する警告への影響Sparkコンテキストの作成。

これは、同じガイドのSimpleApp.scalaの例のコードのバージョンであり、ワークシートで機能するように変更されています。 masterおよびappNameパラメーターは、同じワークシートで設定する必要があります。

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

機能しているスクリーンショットScala Sparkを使用したワークシート: a screenshot of the functioning Scala Worksheet with Spark

IntelliJ CE 2017.1の更新(REPLモードのワークシート)

2017.1でIntellijが導入されましたREPLワークシートのモード。[REPLを使用]オプションをオンにして同じコードをテストしました。このモードを実行するには、[コンパイラプロセスでワークシートを実行する]を残す必要があります上記で説明したワークシート設定のチェックボックスをオンにします(デフォルトでオンになっています)。

コードはWorksheet REPLモードで正常に実行されます。

これがスクリーンショットです: Spark in IJ Scala Worksheet REPL mode

11
tomaskazemekas

私はIntellij CE 2016.3を使用しています、Spark 2.0.2を実行してEclipse互換モデルでscalaワークシートを実行します。これまでのところ、大部分は大丈夫ですが、小さな問題が残っています。

設定->タイプscala->言語とフレームワークで、Scala->ワークシートを選択-> Eclipse互換モードのみを選択するか、何も選択しないでください。

以前は、「コンパイラープロセスでワークシートを実行する」を選択すると、SparkだけでなくElasticsearchを使用するだけでなく、多くの問題が発生しました。 「コンパイラプロセスでワークシートを実行する」を選択すると、Intellijはトリッキーな最適化を行い、変数にレイジーを追加するなどして、ワークシートがワイヤードになることがあります。

また、ワークシートで定義されたクラスが機能しない、または異常な動作をする場合は、別のファイルに入れてコンパイルし、ワークシートで実行すると、多くの問題が解決することもあります。

5
J.J. Young

私は同じ問題に直面していて、それを解決することができませんでしたが、いくつかの試みを試みました。ワークシートの代わりに、現在私は scala console を使用していますが、少なくとも何も使用しないよりはましです。

1
safat siddiqui

Spark 1.4.0サイト によると、scala 2.10.xを使用する必要があります。

SparkはJava 6+、Python 2.6+ and R 3.1+で動作します。Scala APIの場合、Spark 1.4.0はScala 2.10を使用します。互換性のあるScalaバージョン(2.10.x)を使用する必要があります。

編集済み:

Sbtプロジェクトを選択した後、intelliJで「新しいプロジェクトを作成」をクリックして「次へ」をクリックすると、このメニューが表示され、scalaバージョンを選択できます:

enter image description here

編集済み2:

これを使用することもできますspark scala 2.11.xのコアパッケージ:

libraryDependencies += "org.Apache.spark" %% "spark-core_2.11" % "1.4.0"
1
Marco