scala - 使用 SBT 制作 Spark Fat Jar 的正确方法

标签 scala jar apache-spark sbt sbt-assembly

我需要一个带有 Spark 的 Fat Jar,因为我正在为 Knime 创建一个自定义节点。基本上它是一个在 Knime 内部执行的独立 jar,我认为 Fat Jar 是生成本地 Spark 作业的唯一方法。最终我们将继续向远程集群提交作业,但现在我需要它以这种方式产生。

也就是说,我用这个做了一个 Fat Jar:https://github.com/sbt/sbt-assembly

我做了一个空的 sbt 项目,在依赖项中包含 Spark-core 并组装了 Jar。我将它添加到我的自定义 Knime 节点的 list 中,并尝试生成一个简单的作业(并行化一个集合,收集它并打印它)。它开始了,但我收到此错误:

No configuration setting found for key '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
}

我在互联网上的某个地方找到了 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)
}

关于scala - 使用 SBT 制作 Spark Fat Jar 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414782/

相关文章:

java - 如何使用Dataset API编写字数统计?

java - 如何解析带有引号中的某些项目的逗号分隔行(CSV)?

java - 如何使用 Builder 导入第 3 方 jar?

eclipse项目未在本地Maven存储库中导入jar包

postgresql - 如何通过 Spark 中的 jdbc 连接到 docker 托管的 postgresql 数据库?

scala - 使用 SparkSession 或 sqlcontext 时出错

scala - 忽略scala中字符串的大小写

c# - 在 Scala 中实现 ExpandoObject

scala - 捕获可变参数参数的类型

java - Eclipse 导出文件 jar 不包含文件夹