我使用安装了Apache Spark 2.1.0.cloudera1
的Cloudera集群,但我需要Apache Spark git存储库最新提交的新类:
我只是将整个文件复制粘贴到我的sbt scala项目中,但我不知道如何创建sbt-assembly MergeStrategy 以排除群集提供的类:
org.apache.spark.mllib.linalg.distributed.BlockMatrix
来自
org.apache.spark/spark-mllib_2.11/jars/spark-mllib_2.11-2.1.0.cloudera1.jar
并使用新添加的项目类。
我的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
}
答案 0 :(得分:1)
如果您想使用与您的环境中使用的版本不对应的Spark,只需sbt assembly
单个超级jar中的所有Spark依赖项,并spark-submit
。
安装sbt-assembly并删除标记Spark依赖项provided
的行(表示将其从assembly
中排除,这与我们的目标完全相反)。
libraryDependencies ++= providedDependencies.map(_ % "provided")
您必须使用正确版本的Spark,即也应更改以下行(以反映有问题BlockMatrix.scala
的版本)。
val sparkVersion = "2.1.0.cloudera1"
您也可以使用本地构建的Spark。重点是在一个超级jar中拥有所有依赖项,这些依赖项应该覆盖部署环境中的内容。