Конфигурация Typesafe не разрешена в сборке sbt - PullRequest
1 голос
/ 20 марта 2019

Я использую typesafe.Config для загрузки application.conf в моем классе Scala, и с помощью этого метода файлы конфигурации, находящиеся в src / main / resources, разрешаются правильно:

 val config = ConfigFactory.load()
 config.resolve()

Однако, когда я пытаюсь запустить файл jar с помощью spark-submit, файл не найден. Я упаковал jar-файл, используя сборку sbt. Как я могу исправить такое поведение? Вот мой файл build.sbt со стратегиями слияния и зависимостями:

dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.9.5"
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.9.5"
dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.9.5"
dependencyOverrides += "org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % "it, test"

resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
resolvers += "confluent" at "http://packages.confluent.io/maven/"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-hive" % sparkVersion,
  "org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % "it, test",
  "org.scalacheck" %% "scalacheck" % "1.14.0" % "it, test",
  "io.kubernetes" % "client-java" % "3.0.0" % "it",
  "org.json" % "json" % "20180813",
  "io.circe" %% "circe-core" % circeVersion,
  "io.circe" %% "circe-generic" % circeVersion,
  "io.circe" %% "circe-parser" % circeVersion,
  "org.apache.avro" % "avro" % "1.8.2",
  "org.apache.spark" %% "spark-avro" % "2.4.0",
  "org.apache.logging.log4j" % "log4j-core" % "2.7",
  "org.apache.logging.log4j" % "log4j-api" % "2.7",
  "io.prestosql" % "presto-jdbc" % "304" % "it, test",
  "com.facebook.presto" % "presto-jdbc" % "0.217" % "it, test",
  "com.microsoft.azure" % "azure-sqldb-spark" % "1.0.2",
  "com.microsoft.sqlserver" % "mssql-jdbc" % "7.2.0.jre8",
  "com.typesafe" % "config" % "1.3.3"
)

assemblyJarName in assembly := "spark_mssql_job_avro.jar"
mainClass in assembly := Some("main.SparkJob")

assemblyMergeStrategy in assembly := {
  case x if x.endsWith(".conf") => MergeStrategy.discard
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first
  case PathList("org", "apache", "commons", "logging", _*) => MergeStrategy.first
  case PathList("org", "apache", "commons", "beanutils", _*) => MergeStrategy.first
  case PathList("org", "apache", "commons", "collections", _*) => MergeStrategy.first
  case PathList("org", "apache", "hadoop", "yarn", _*) => MergeStrategy.first
  case PathList("org", "aopalliance", _*) => MergeStrategy.first
  case PathList("org", "objenesis", _*) => MergeStrategy.first
  case PathList("com", "sun", "jersey", _*) => MergeStrategy.first
  case PathList("org", "apache", "hadoop", "yarn", _*) => MergeStrategy.first
  case PathList("org", "slf4j", "impl", _*) => MergeStrategy.first
  case PathList("com", "codahale", "metrics", _*) => MergeStrategy.first
  case PathList("javax", "transaction", _*) => MergeStrategy.first
  case PathList("javax", "inject", _*) => MergeStrategy.first
  case PathList("javax", "xml", _*) => MergeStrategy.first
  case PathList("META-INF", "jersey-module-version") => MergeStrategy.first
  case PathList("plugin.xml") => MergeStrategy.first
  case PathList("parquet.thrift") => MergeStrategy.first
  case PathList("git.properties") => MergeStrategy.first
  case PathList("codegen", "config.fmpp") => MergeStrategy.first
  case PathList("overview.html") => MergeStrategy.discard
  case "application.conf" => MergeStrategy.concat
  case x => (assemblyMergeStrategy in assembly).value(x)
}

1 Ответ

2 голосов
/ 20 марта 2019

Вы удаляете все файлы .conf (если их несколько с одним именем) с помощью

case x if x.endsWith(".conf") => MergeStrategy.discard

Удаление этой строки должно решить проблему.На всякий случай загляните внутрь банки и убедитесь, что файл содержит то, что вы ожидали.

...