Cho*_*eat 5 scala jar sbt sbt-assembly apache-spark
我需要一个带有Spark的Fat Jar,因为我正在为Knime创建一个自定义节点.基本上它是在Knime内部执行的自包含jar,我假设Fat Jar是产生本地Spark Job的唯一方法.最终我们将继续向远程集群提交作业,但现在我需要它以这种方式生成.
也就是说,我用这个制作了一个Fat Jar:https://github.com/sbt/sbt-assembly
我做了一个空的sbt项目,在依赖项中包含了Spark-core并组装了Jar.我将它添加到我的自定义Knime节点的清单中,并尝试生成一个简单的作业(pararellize一个集合,收集并打印它).它开始但我得到这个错误:
找不到密钥'akka.version'的配置设置
我不知道如何解决它.
编辑:这是我的build.sbt
name := "SparkFatJar"
version := "1.0"
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "1.3.0"
)
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.8"
assemblyJarName in assembly := "SparkFatJar.jar"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上的某个地方找到了Spark的合并策略,但我现在找不到源代码.
我认为问题在于你如何设置assemblyMergeStrategy.试试这个:
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case "application.conf" => MergeStrategy.concat
case "reference.conf" => MergeStrategy.concat
case x =>
val baseStrategy = (assemblyMergeStrategy in assembly).value
baseStrategy(x)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3745 次 |
| 最近记录: |