首页 文章

在SBT生成的胖JAR中包含Spark Package JAR文件

提问于
浏览
10

spark-daria项目是uploaded to Spark Packages,我正在使用sbt-spark-package plugin在另一个SBT项目中访问spark-daria代码 .

我可以在 sbt assembly 生成的胖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)
  }
}

这段代码感觉就像一个黑客 . 有没有更好的方法在fat JAR文件中包含spark-daria?

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

1 回答

  • 0

    README for version 0.2.6声明如下:

    在任何情况下,您实际上无法使用sparkComponents指定Spark依赖项(例如,您有排除规则)并按照提供的方式配置它们(例如,演示的独立jar),您可以使用spIgnoreProvided:= true来正确使用程序集插件 .

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

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

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

相关问题