如何设置Intellij 14 Scala Worksheet来运行Spark

rbu*_*urg 24 scala intellij-idea worksheet apache-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"
Run Code Online (Sandbox Code Playgroud)

这是我在工作表中运行的代码

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

错误

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)
Run Code Online (Sandbox Code Playgroud)

当我将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)
  }
}
Run Code Online (Sandbox Code Playgroud)

有人可以提供一些指导,说明我应该在哪里解决此异常吗?

谢谢.

tom*_*kas 11

由于仍然存在很多疑问,如果可以使用Spark运行IntelliJ IDEA Scala工作表并且这个问题是最直接的问题,我想分享我的截图和菜谱样式配方以在工作表中评估Spark代码.

我在IntelliJ IDEA(CE 2016.3.4)中使用Spark 2.1.0和Scala Worksheet.

第一步是在IntelliJ中导入依赖项时使用build.sbt文件.我使用了Spark Quick Start中的 simple.sbt :

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
Run Code Online (Sandbox Code Playgroud)

第二步是取消选中Settings - > Languages and Frameworks - > Scala - > Worksheet中的'在编译器进程中运行工作表'复选框.我还测试了其他工作表设置,它们对重复Spark上下文创建的警告没有影响.

以下是SimpleApp.scala示例中的代码版本,该示例在同一指南中修改为在Worksheet中工作.在masterappName参数都在同一工作表进行设置:

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")
Run Code Online (Sandbox Code Playgroud)

以下是使用Spark的功能Scala工作表的屏幕截图: 使用Spark的功能Scala工作表的屏幕截图

IntelliJ CE 2017.1的更新(REPL模式下的工作表)

在2017.1中,Intellij为Worksheet引入了REPL模式.我已经通过选中"使用REPL"选项测试了相同的代码.要运行此模式,您需要在上面描述的工作表设置中选中"在编译器进程中运行工作表"复选框(默认情况下是这样).

代码在Worksheet REPL模式下运行正常.

这是截图: IJ Scala工作表REPL模式中的Spark


J.J*_*ung 5

我使用Intellij CE 2016.3,Spark 2.0.2并在eclipse兼容模型中运行scala工作表,到目前为止,大多数现在都没问题,只留下一些小问题.

打开Preferences-> type scala - >在Languages&Frameworks中,选择Scala - > Choose Worksheet - >只选择eclipse兼容模式或不选择任何内容.

以前,当选择"在编译过程中运行工作表"时,我遇到了很多问题,而不仅仅是使用Spark,还有Elasticsearch.我想当选择"在编译过程中运行工作表"时,Intellij会做一些棘手的优化,可能会对变量等添加延迟,这在某些情况下会使工作表变得相当有线.

另外我发现有时当工作表中定义的类不工作或行为异常时,放入一个单独的文件并编译它,然后在工作表中运行它,将解决很多问题.


Mar*_*rco 1

根据Spark 1.4.0 站点,您应该使用 scala 2.10.x:

Spark 在 Java 6+、Python 2.6+ 和 R 3.1+ 上运行。对于 Scala API,Spark 1.4.0 使用 Scala 2.10。您将需要使用兼容的 Scala 版本 (2.10.x)。

编辑:

当您在选择 sbt 项目后单击 intelliJ 中的“创建新项目”并单击“下一步”时,将出现此菜单,您可以在其中选择 scala 版本:

在此输入图像描述

编辑2:

您还可以在 scala 2.11.x 中使用此 Spark 核心包:

libraryDependencies += "org.apache.spark" %% "spark-core_2.11" % "1.4.0"
Run Code Online (Sandbox Code Playgroud)