build.sbt:如何添加 spark 依赖项

Posted

技术标签:

【中文标题】build.sbt:如何添加 spark 依赖项【英文标题】:build.sbt: how to add spark dependencies 【发布时间】:2016-10-23 19:30:14 【问题描述】:

您好,我正在尝试在下面的 build.sbt 文件中下载 spark-corespark-streamingtwitter4jspark-streaming-twitter

name := "hello"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.4.1"

libraryDependencies ++= Seq(
  "org.twitter4j" % "twitter4j-core" % "3.0.3",
  "org.twitter4j" % "twitter4j-stream" % "3.0.3"
)

libraryDependencies += "org.apache.spark" % "spark-streaming-twitter_2.10" % "0.9.0-incubating"

我只是在网上使用了这个libraryDependencies,所以我不确定要使用哪个版本等。

有人可以向我解释我应该如何修复这个 .sbt 文件。我花了几个小时试图弄清楚,但没有一个建议奏效。我通过自制软件安装了scala,我的版本是2.11.8

我所有的错误都是关于:

Modules were resolved with conflicting cross-version suffixes.

【问题讨论】:

【参考方案1】:

问题是您混合了 Scala 2.11 和 2.10 工件。你有:

scalaVersion := "2.11.8"

然后:

libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.4.1"

需要2.10 工件的地方。您也在混合使用 Spark 版本,而不是使用一致的版本:

// spark 1.6.1
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"

// spark 1.4.1
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.4.1"

// spark 0.9.0-incubating
libraryDependencies += "org.apache.spark" % "spark-streaming-twitter_2.10" % "0.9.0-incubating"

这里有一个build.sbt 可以解决这两个问题:

name := "hello"

version := "1.0"

scalaVersion := "2.11.8"

val sparkVersion = "1.6.1"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-streaming" % sparkVersion,
  "org.apache.spark" %% "spark-streaming-twitter" % sparkVersion
)

您也不需要手动添加 twitter4j 依赖项,因为它们是由 spark-streaming-twitter 传递添加的。

【讨论】:

非常感谢!一个简单的问题是 scala (2.11.8) 的版本是否可以与所有版本为 1.6.1 的 spark 库一起使用? 是的。 Spark 1.6.1 包含 2.10 和 2.11 版本的 scala。 对此我还有一个问题。对于那个很抱歉!当我执行sbt run 时,似乎没有下载第三个依赖项"org.apache.spark" %% "spark-core" % sparkVersion,因此在src/main/scala/example.scala 的scala 文件中,初始化我的spark 上下文时出现错误:16/06/21 21:18:14 ERROR SparkContext: Error initializing SparkContext. java.net.UnknownHostException: LM-SFA-11002982: LM-SFA-11002982: nodename nor servname provided, or not known 这个错误与是否下载依赖无关。您应该打开另一个问题来解决这个疑问。【参考方案2】:

它对我有用:

name := "spark_local"

version := "0.1"

scalaVersion := "2.11.8"


libraryDependencies ++= Seq(
  "org.twitter4j" % "twitter4j-core" % "3.0.5",
  "org.twitter4j" % "twitter4j-stream" % "3.0.5",
  "org.apache.spark" %% "spark-core" % "2.0.0",
  "org.apache.spark" %% "spark-sql" % "2.0.0",
  "org.apache.spark" %% "spark-mllib" % "2.0.0",
  "org.apache.spark" %% "spark-streaming" % "2.0.0"
)

【讨论】:

以上是关于build.sbt:如何添加 spark 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 build.sbt 中为 spark 3 和 scala 2.12 获取 neo4j 的命令(依赖项)吗?

Sbt Plugin 添加依赖到 project/build.sbt

将 Intellij 与 SBT 一起使用时如何更改提供的依赖项?

IntelliJ 中 SBT 项目的未解析依赖路径

提取 Databricks 集群依赖项并将它们添加到 build.sbt 以在 Azure DevOps 中构建 jar

SBT 插件:如何将编译器插件添加为不向下游传播的依赖项?