【问题标题】:How to setup Intellij 14 Scala Worksheet to run Spark如何设置 Intellij 14 Scala 工作表以运行 Spark
【发布时间】:2015-08-24 18:27:54
【问题描述】:

我正在尝试在 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)
  }
}

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

谢谢。

【问题讨论】:

  • 我会试试 IDEA 帮助论坛。他们的工作表与各种事物交互时存在许多错误。我只建议将它用于基本的语法检查。
  • AFAIK 你不能 - 改用 Intellij scala 控制台

标签: scala intellij-idea apache-spark worksheet


【解决方案1】:

由于仍然存在相当多的疑问,是否可以使用 Spark 运行 IntelliJ IDEA Scala 工作表,而这个问题是最直接的问题,我想分享我的屏幕截图和食谱风格的食谱,以评估 Spark 代码工作表。

我在 IntelliJ IDEA (CE 2016.3.4) 中使用带有 Scala 工作表的 Spark 2.1.0。

第一步是在 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"

第二步是在设置 -> 语言和框架 -> Scala -> 工作表中取消选中“在编译器进程中运行工作表”复选框。我还测试了其他工作表设置,它们对有关重复 Spark 上下文创建的警告没有影响。

这是同一指南中 SimpleApp.scala 示例中的代码版本,已修改为在工作表中工作。 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")

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

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

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

代码在 Worksheet REPL 模式下运行良好。

这里是截图:

【讨论】:

  • 我刚刚在 IntelliJ IDEA 2018.1.5 CE 中尝试过此选项,需要取消选中该选项。
  • 我在 IntelliJ IDEA 2019.1(社区版)上尝试了您的代码,构建于 2019 年 3 月 27 日,必须选中“在编译器进程中运行工作表”选项。但我仍然有一个错误“错误:(1, 27)对象火花不是包org.apache导入org.apache.spark的成员。{SparkConf,SparkContext}”
  • 能否请您在您的 github 帐户中添加简单的工作项目,以便可以在本地克隆和运行?
  • @Alexander:您需要在 build.sbt 中导入 spark_core 库依赖项才能使这些导入工作repo1.maven.org/maven2/org/apache/spark
【解决方案2】:

我使用 Intellij CE 2016.3、Spark 2.0.2 并在 eclipse 兼容模型中运行 scala 工作表,到目前为止,大部分都可以,只剩下小问题了。

打开 Preferences-> 输入 scala -> 在 Languages & Frameworks 中,选择 Scala -> 选择 Worksheet -> 只选择 eclipse 兼容模式或什么都不选。

以前,在选择“在编译过程中运行工作表”时,我遇到了很多问题,不只是使用Spark,还有Elasticsearch。我想在选择“编译过程中的运行工作表”时,Intellij将执行一些棘手的优化,添加到变量等,也许在某些情况下使工作表相当连续。

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

【讨论】:

    【解决方案3】:

    根据Spark 1.4.0 site,您应该使用 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)。

    已编辑:

    当你在intelliJ中选择sbt project后点击“create new project”并点击“next”,会出现这个菜单,你可以在其中选择scala版本:

    编辑 2:

    您也可以将此 spark 核心包用于 scala 2.11.x:

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

    【讨论】:

    • 嗨,Marco,我已更改为 scalaVersion := "2.10.4"libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0",但仍然出现异常
    • @rburg,尝试使用此链接将 scala 的 intellij 版本设置为 2.10.x - How to setup Intellij for Scala 2.10
    • 我已经按照说明设置了 scala 和 spark 版本,但仍然收到 ERROR SparkContext: Error initializing SparkContext. java.lang.ClassNotFoundException: rg.apache.spark.rpc.akka.AkkaRpcEnvFactory
    • 你在使用这个解析器吗? resolvers += "Akka Repository" at "repo.akka.io/releases"
    • 不,我没有使用那个解析器。我将它添加到 build.sbt 但我仍然收到相同的错误 ClassNotFoundException 错误
    【解决方案4】:

    我遇到了同样的问题,但尝试了几次都无法解决。现在我使用的是scala console,而不是工作表,至少总比没有好。

    【讨论】:

      【解决方案5】:

      我也遇到过类似的 Intellij 问题,在 build.sbt 中添加 libraryDependencies 后,SBT 无法解析这些库。 IDEA 默认不下载依赖项。重新启动Intellij,它解决了问题。开始下载依赖项。

      所以,

      确保在你的本地项目中下载了依赖项,如果没有,重启IDE或触发IDE下载所需的依赖项

      确保仓库已解析,如果没有,请在resolver+=下包含仓库位置

      【讨论】:

        【解决方案6】:

        以下是我的 maven 依赖配置,它始终有效且稳定。我通常会编写 spark pragram 并提交给 yarn-cluster 进行集群运行。

        关键 jar 是 ${spark.home}/lib/spark-assembly-1.5.2 hadoop2.6.0.jar,它包含几乎所有的 spark 依赖项,并且包含在每个 spark 版本中。 (实际上 spark-submit 会将这个 jar 分发到集群,所以不用担心 ClassNotFoundException 了:D)

        我认为您可以使用上述类似配置更改您的 libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0"(Maven 使用 systemPath 指向本地jar依赖,我认为SBT有类似的配置)

        注意:记录 jar 排除项是可选的,因为它与我的其他 jar 冲突。

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

        【讨论】:

          猜你喜欢
          • 2016-09-29
          • 2015-10-22
          • 1970-01-01
          • 1970-01-01
          • 2017-05-31
          • 1970-01-01
          • 2020-10-19
          • 2015-06-25
          • 1970-01-01
          相关资源
          最近更新 更多