Scala 如何使用不同于Cloudera'中使用的Spark版本;s CDH集群?

Scala 如何使用不同于Cloudera'中使用的Spark版本;s CDH集群?,scala,apache-spark,sbt,sbt-assembly,Scala,Apache Spark,Sbt,Sbt Assembly,我使用安装了Apache Spark2.1.0.cloudera1的Cloudera群集,但我需要Apache Spark git存储库中最新提交的一个新类: 我只是将整个文件复制粘贴到我的sbt scala项目中,但我不知道如何创建sbt assembly MergeStrategy以排除集群提供的类: org.apache.spark.mllib.linalg.distributed.BlockMatrix 从 并使用新添加的项目类 我的sbt.build文件: val sparkVer

我使用安装了Apache Spark
2.1.0.cloudera1
的Cloudera群集,但我需要Apache Spark git存储库中最新提交的一个新类:

我只是将整个文件复制粘贴到我的sbt scala项目中,但我不知道如何创建sbt assembly MergeStrategy以排除集群提供的类:

org.apache.spark.mllib.linalg.distributed.BlockMatrix

并使用新添加的项目类

我的sbt.build文件:

val sparkVersion = "2.1.0.cloudera1"

lazy val providedDependencies = Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-mllib" % sparkVersion
)

libraryDependencies ++= providedDependencies.map(_ % "provided")

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first
  case _ => MergeStrategy.first
}

如果您想使用与您环境中使用的版本不一致的Spark,只需将所有Spark依赖项
sbt assembly
放在一个uber jar中,然后
Spark提交它即可

安装并拆下标记火花相关性的线
提供的
(这表示将火花相关性从
组件中排除,这与我们的目标正好相反)

您必须使用正确版本的Spark,也就是说,下一行也应该更改(以反映有问题的
BlockMatrix.scala
版本)


您可能也希望使用本地构建的Spark。关键是要将所有依赖项放在一个uber jar中,这些依赖项应该覆盖部署环境中的内容。

好的,谢谢,但是是否可以从新库中只复制一个类(带有原始包),这样我就可以避免通过ssh发送胖jar?我不这么认为。它可以工作,但我认为这是巧合。
val sparkVersion = "2.1.0.cloudera1"

lazy val providedDependencies = Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-mllib" % sparkVersion
)

libraryDependencies ++= providedDependencies.map(_ % "provided")

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first
  case _ => MergeStrategy.first
}
libraryDependencies ++= providedDependencies.map(_ % "provided")
val sparkVersion = "2.1.0.cloudera1"