Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Intellij 14 Scala工作表以运行Spark_Scala_Intellij Idea_Apache Spark_Worksheet - Fatal编程技术网

如何设置Intellij 14 Scala工作表以运行Spark

如何设置Intellij 14 Scala工作表以运行Spark,scala,intellij-idea,apache-spark,worksheet,Scala,Intellij Idea,Apache Spark,Worksheet,我试图在Intellij14 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.{S

我试图在Intellij14 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)
错误

当我运行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)
  }
}
import org.apache.spark.{SparkContext,SparkConf}
//停止详细日志
导入org.apache.log4j.{Level,Logger}
对象TestMain{
Logger.getLogger(“org”).setLevel(Level.OFF)
def main(参数:数组[字符串]):单位={
//创建SparkContext
val conf=new SparkConf()
.setMaster(“本地[2]”)
.setAppName(“mySparkApp”)
.set(“spark.executor.memory”,“1g”)
.set(“spark.rdd.compress”、“true”)
.set(“火花、存储、记忆提取”、“1”)
val sc=新的SparkContext(配置)
val data=sc.parallelize(1到10000000).collect().filter(<1000)
data.foreach(println)
}
}
是否有人可以提供一些指导,说明我应该在哪里解决此异常

谢谢。

根据需要,您应该使用scala 2.10.x:

Spark在Java6+、Python2.6+和R3.1+上运行。对于Scala API,Spark 1.4.0使用Scala 2.10。您需要使用兼容的Scala版本(2.10.x)

编辑:

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

编辑2:

您也可以将此spark core软件包用于scala 2.11.x:

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

我也面临着同样的问题,尽管我尝试了几次,但还是无法解决。我现在使用的不是工作表,至少比没有好。

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

所以

确保已在本地项目中下载依赖项,如果未下载,请重新启动IDE或触发IDE以下载所需的依赖项

name := "LearnSpark"
version := "1.0"
scalaVersion := "2.11.7"
// for working with Spark API
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.4.0"
确保已解析存储库,否则,请将存储库位置包含在“解析程序”下+=


下面是我的maven Dependences配置,它始终工作且稳定。我通常编写spark pragram并将其提交给纱线集群进行集群运行

关键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具有类似的配置)

注意:日志jars排除是可选的,因为它与我的其他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>

org.apache.spark
火花组件
1.5.2
系统
${spark.home}/lib/spark-assembly-1.5.2-hadoop2.6.0.jar
org.slf4j
slf4j-log4j12
log4j
log4j
org.scala-lang
scala图书馆
2.10.2

我使用Intellij CE 2016.3、Spark 2.0.2,并在eclipse兼容的模型中运行scala工作表,到目前为止,大多数都还可以,只剩下一个小问题

打开首选项->键入scala->在语言和框架中,选择scala->选择工作表->仅选择eclipse兼容模式或不选择任何内容

以前,当选择“在编译器进程中运行工作表”时,我经历了很多问题,不仅仅是使用Spark,还有Elasticsearch。我猜当选择“在编译器进程中运行工作表”时,Intellij会进行一些复杂的优化,可能会向变量中添加lazy等,这在某些情况下会使工作表变得非常复杂


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

由于仍然存在一些疑问,即是否有可能使用Spark运行IntelliJ IDEA Scala工作表,而这个问题是最直接的问题,因此我想分享我的屏幕截图和一个烹饪书式配方,以便在工作表中评估Spark代码

我正在IntelliJ IDEA(CE 2016.3.4)中使用Spark 2.1.0和Scala工作表

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

第二步是取消选中设置->语言和框架->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")
以下是使用Spark的Scala工作表的屏幕截图:

IntelliJ CE 2017.1更新(工作表处于REPL模式)

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

代码在工作表REPL模式下运行良好

以下是截图:

我想试试这个主意,帮你
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")