使用Sparka和IntelliJ

时间:2016-12-12 20:55:54

标签: scala apache-spark intellij-idea jvm

我是Scala和Spark的新手。我对使用IntelliJ的工作有多么困难感到沮丧。目前,我无法运行以下代码。我确定这很简单,但我无法让它发挥作用。

我试图跑:

import org.apache.spark.{SparkConf, SparkContext}

object TestScala {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("Datasets Test")
    conf.setMaster("local[2]")
    val sc = new SparkContext(conf)
    println(sc)
  }
}

我得到的错误是:

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
at org.apache.spark.util.Utils$.getCallSite(Utils.scala:1413)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:77)
at TestScala$.main(TestScala.scala:13)
at TestScala.main(TestScala.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

我的build.sbt文件:

name := "sparkBook"

version := "1.0"

scalaVersion := "2.12.1"

3 个答案:

答案 0 :(得分:3)

将您的scalaVersion更改为2.11.8,并将Spark依赖项添加到build.sbt

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

答案 1 :(得分:1)

另一种情况是intellij指向2.12.4,并且所有的maven / sbt依赖项均为2.11.8。使用scala dep verion 2.11 ...

我在intellij ui的全局库中从2.12.4退回到2.11.8。并开始工作

详细信息:

指向2.11.8的Maven pom.xml,但是在我的Intellij ... sdk在下面显示的全局库中为2.12.4。 造成

java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;

enter image description here

在全局库中退回到2.11.8 ..

enter image description here

就这样了。问题解决了。执行该程序没有更多错误。

  

结论: 单独使用Maven依赖关系并不能解决问题,此外,我们还必须在全局配置scala sdk   库,因为它在运行spark local时出现错误   程序和错误与Intellij运行时有关。

答案 2 :(得分:0)

如果使用spark 2.4.3,则即使spark网站说要使用scala 2.12,也需要使用scala 2.11。 https://spark.apache.org/docs/latest/

避免scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;