Как динамически заменить безопасные операторы включения в Spark jar - PullRequest
1 голос
/ 12 марта 2019

Этот метод заменяет typsafe включающие пути к файлам в файле, размещенном в каталоге ресурсов. Он работает локально, но не работает при работе в банке на GCP dataproc

def getTypeSafeConfig(conf: DatalakeConfig): Config = {

 val env = conf.env

 val resourcesPath = getClass
  .getResource("/activity/mlmActivityProducer.conf")
  .getPath.replace("/activity/mlmActivityProducer.conf", "")

 println(resourcesPath)

 val accountsConfigPath = s"${resourcesPath}/accounts/$env/accounts.conf"
 val mlmConfigPath = s"${resourcesPath}/mlm.conf"
 val accountsTestScenarioConfigPath = s"${resourcesPath}/activity/testScenario.conf"

val stream = 
 getClass.getResourceAsStream("/activity/mlmActivityProducer.conf")
 val lines = scala.io.Source.fromInputStream( stream ).getLines

 var s = ""

 lines.foreach(l => {

  val ll = l
    .replace(ACCOUNTS_CONFIG_PATH, accountsConfigPath)
    .replace(MLM_CONFIG_PATH, mlmConfigPath)
    .replace(ACCOUNTS_TEST_SCENARIO_CONFIG_PATH, 
   accountsTestScenarioConfigPath)

  //      println(s"floki: ${ll}")
  s += s"\n${ll}"

 })

 println(s"res: $s")



 ConfigFactory.parseString(s)
}

Это пути, назначенные в Dataproc:

include file("file:/tmp/87a59d76c5814f30aa29935f397593cf/common-1.0.0-SNAPSHOT.jar!/accounts/qe/accounts.conf")
include file("file:/tmp/87a59d76c5814f30aa29935f397593cf/common-1.0.0-SNAPSHOT.jar!/mlm.conf")
include file("file:/tmp/87a59d76c5814f30aa29935f397593cf/common-1.0.0-SNAPSHOT.jar!/activity/testScenario.conf")

1 Ответ

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

Я делал это неправильно, лучше использовать запасной вариант

def getTypeSafeConfig(conf: DatalakeConfig): Config = {

  val env = conf.env

  val baseConfig = ConfigFactory.parseResources("activity/mlmActivityProducer.conf")
  val envAccountConfig = ConfigFactory.parseResources(s"accounts/$env/accounts.conf")
  val mlmConfig = ConfigFactory.parseResources("mlm.conf")
  val testScenarioConfig = ConfigFactory.parseResources(s"activity/testScenario.conf")
  val typeSafeConfig = testScenarioConfig
    .withFallback(envAccountConfig)
    .withFallback(mlmConfig)
    .withFallback(baseConfig)
    .resolve()

   println(typeSafeConfig.toString)

   typeSafeConfig
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...