10

spark-daria 项目已上传到 Spark 包,我正在使用sbt-spark-package 插件访问另一个 SBT 项目中的 spark-daria 代码。

sbt assembly我可以在文件中使用以下代码生成的 fat JAR 文件中包含 spark-daria build.sbt

spDependencies += "mrpowers/spark-daria:0.3.0"

val requiredJars = List("spark-daria-0.3.0.jar")
assemblyExcludedJars in assembly := {
  val cp = (fullClasspath in assembly).value
  cp filter { f =>
    !requiredJars.contains(f.data.getName)
  }
}

这段代码感觉像是 hack。有没有更好的方法将 spark-daria 包含在 fat JAR 文件中?

注意我想在这里建立一个半胖的 JAR 文件。我希望将 spark-daria 包含在 JAR 文件中,但我不希望 JAR 文件中包含所有 Spark!

4

1 回答 1

1

0.2.6 版的README声明如下:

在任何情况下,如果您确实无法使用sparkComponents(例如您有排除规则)指定 Spark 依赖项并将它们配置为provided(例如用于演示的独立 jar),您可以使用该插件spIgnoreProvided := true来正确使用该assembly插件。

然后,您应该在构建定义中使用此标志并设置 Spark 依赖项,provided就像我spark-sql:2.2.0在以下示例中所做的那样:

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0" % "provided"

请注意,通过设置此选项,您的 IDE 可能不再具有在本地编译和运行代码所需的依赖项引用,这意味着您必须手动将必要的 JAR 添加到类路径中。我经常在 IntelliJ 上这样做,我所做的是在我的机器上安装 Spark 分发并将其jars目录添加到 IntelliJ 项目定义中(如果你需要,这个问题可能会帮助你)。

于 2018-01-07T10:26:32.197 回答