我尝试使用SBT使用spark_submit运行示例scala代码。这是我的scala代码 -
import scala.math.random
import org.apache.spark._
/** Computes an approximation to pi */
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = 100000 * slices
val count = spark.parallelize(1 to n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}
}
name := "Spark Sample"
version := "1.0"
scalaVersion := "2.9.1"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0"
但是当我运行SBT和包命令时我得到以下错误
[error](*:update)sbt.ResolveException:未解析的依赖项: org.apache.spark#spark-core_2.9.1; 2.0.0:not found
我的scala版本 2.9.1 ,我的火花版本 2.0.0 。
我跟随以下网站使用sbt -
运行spark_submit答案 0 :(得分:2)
未解决的依赖项:org.apache.spark#spark-core_2.9.1; 2.0.0:未找到
Spark 2.0.0没有基于Scala 2.9.1的依赖关系,因此出现错误信息。
sbt不可能更正确。博客文章超级旧,你最好立即忘记它(我真的希望博客文章不再存在)。请改用Spark official documentation,最好的选择是从Quick Start开始。
快速解决方法是将scalaVersion := "2.9.1"
中的sparksample.sbt
替换为:
scalaVersion := "2.11.8"
你应该没事。
PROTIP 将sparksample.sbt
重命名为build.sbt
(您的队友会再次爱你; - )
答案 1 :(得分:2)
知道如何解决这个问题很重要,这个问题经常发生在JVM上。
在Scala生态系统中,二进制兼容性是一个问题,依赖关系通常会使用编译的Scala版本命名artifactId
。例如,最新版本的Spark具有以下坐标:
groupId: 'org.apache.spark'
artifactId: 'spark-core_2.11'
version: '2.1.0'
artifactId
表示此依赖项是使用Scala 2.11编译的。
同时,SBT提供速记,因此您不必将已经指定的Scala版本附加到libraryDependencies
中列出的每个依赖项。它通过%%
和groupId
之间的artifactId
来实现。 (如果您想明确版本,可以使用单个%
,但这在SBT用户中并不常见。)
将所有这些放在一起,您在build.sbt
暗示您的项目与坐标org.apache.spark:spark-core_2.9.1:2.0.0
有依赖关系。但错误说SBT找不到一个。
当发生这种情况时,有两种可能性。依赖项不存在,或者您需要将存储库添加到build.sbt
。有一些像Spark一样广泛的东西 - 你可以在documentation中确认 - 你会知道Spark可以从Maven Central获得。正如search for the artifact you specified所示,它不存在。
那么现在是时候检查文档来确定你需要哪个工件了。或者您可以再次检查Maven Central或MVNRepository,我通常更喜欢,找到您喜欢使用的Scala版本和 Spark版本组合的工件。
最后,你会发现Scala 2.11.x,它不是不是最新版本的Scala,但是Spark最新版本的Scala是你想要的 - 可能是2.11。 8。如果您的环境允许,请使用最新版本的Spark,即2.1.0:
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"org.apache.spark" %% "spark-sql" % "2.1.0"
)
答案 2 :(得分:0)
没有2.9.1版本的spark-core 2.0,请参阅https://mvnrepository.com/artifact/org.apache.spark Scala 2.9.1非常陈旧,与2.10及更高版本存在许多兼容性问题。你应该至少尝试Scala 2.10。