scala - 在sbt中,如何指定spark依赖的hadoop版本呢?

标签 scala apache-spark sbt

我有一个使用spark和spark sql的sbt项目,但是我的集群使用hadoop 1.0.4和spark 1.2以及spark-sql 1.2,目前我的build.sbt看起来像这样:

libraryDependencies ++= Seq(
    "com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
    "com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
    "com.datastax.spark" % "spark-cassandra-connector_2.10" % "1.2.1",
    "org.apache.spark" % "spark-core_2.10" % "1.2.1",
    "org.apache.spark" % "spark-sql_2.10" % "1.2.1",
)

事实证明,我正在使用 hadoop 2.2.0 运行应用程序,但我希望在我的依赖项中看到 hadoop-*-1.0.4。请问我该怎么办?

最佳答案

您可以排除 Spark 对 hadoop 的依赖关系,并添加一个包含您需要的版本的显式依赖项,大致如下:

libraryDependencies ++= Seq(
    "com.datastax.cassandra" % "cassandra-driver-core" % "2.1.5",
    "com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.5",
    "com.datastax.spark" % "spark-cassandra-connector" %% "1.2.1",
    "org.apache.spark" % "spark-sql_2.10" % "1.2.1" excludeAll(
         ExclusionRule("org.apache.hadoop")
    ),
    "org.apache.hadoop" % "hadoop-client" % "2.2.0"
)

您可能不需要对 spark-core 的依赖,因为 spark-sql 应该将它传递给您。

此外,请注意 spark-cassandra-connector 可能还依赖于 Spark,这可能会再次间接带回 hadoop => 您可能还需要在那里添加排除规则。

最后说明:一个出色的工具,用于调查 https://github.com/jrudolph/sbt-dependency-graph 的依赖项来自何处。

关于scala - 在sbt中,如何指定spark依赖的hadoop版本呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860551/

相关文章:

scala - sbt 包试图下载一个路径不存在的包

scala - Lagom的嵌入式Kafka在杀死Lagom进程一次后无法启动

python - 为什么 HDInsight 上的 Python 脚本会失败并显示 'No module named numpy' ?

java - 如何在 PySpark 中启用公平调度程序?

apache-spark - Spark 错误 - 值文本文件不是 org.apache.spark.sparkcontext 的成员

scala - 安装了 Scala 和 sbt 插件的 NetBeans 8.0 可以创建 sbt 项目吗?

scala - SBT - 获取托管 jar 的路径

scala - 如何在编译时失败而不是运行时异常

Scala - HashMap 上的折叠操作示例 ** 不是 foldLeft

scala - 函数组合,累积中间结果