В том числе JAR файл Spark Package в SBT сгенерированный жирный JAR

Проект spark-daria загружен в Spark Packages, и я получаю код искры-дары в другом проекте SBT с плагин sbt-spark-package.

Я могу включить spark-daria в файл JAR для жира, сгенерированный sbt assembly, со следующим кодом в файле 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)
  }
}

Этот код выглядит как хак. Есть ли лучший способ включить искры-дары в жирном JAR файле?

N.B. Я хочу создать здесь полужирный файл JAR. Я хочу, чтобы spark-daria был включен в JAR файл, но я не хочу, чтобы все Spark в JAR файле!

Ответ 1

README для версии 0.2.6 утверждает следующее:

В любом случае, когда вы действительно не можете указывать зависимости Spark с помощью sparkComponents (например, у вас есть правила исключения) и настроить их как provided (например, автономный баннер для демонстрации), вы можете использовать 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 (этот вопрос может помочь вам с этим, если вам это нужно).