我是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"
答案 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;
在全局库中退回到2.11.8 ..
就这样了。问题解决了。执行该程序没有更多错误。
结论: 单独使用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;