Spark não funciona com pureconfig
Estou tentando usar pureConfig e configFactory para minha configuração de aplicativo spark. aqui está o meu código:
import pureconfig.{loadConfigOrThrow}
object Source{
def apply(keyName: String, configArguments: Config): Source = {
keyName.toLowerCase match {
case "mysql" =>
val properties = loadConfigOrThrow[DBConnectionProperties](configArguments)
new MysqlSource(None, properties)
case "files" =>
val properties = loadConfigOrThrow[FilesSourceProperties](configArguments)
new Files(properties)
case _ => throw new NoSuchElementException(s"Unknown Source ${keyName.toLowerCase}")
}
}
}
import Source
val config = ConfigFactory.parseString(result.mkString("\n"))
val source = Source("mysql",config.getConfig("source.mysql"))
Quando eu o executo do IDE (intelliJ) ou diretamente do java (ou seja, java jar ...), ele funciona bem.
Mas quando eu o executo com o envio por spark, ele falha com o seguinte erro:
Exception in thread "main" java.lang.NoSuchMethodError: shapeless.Witness$.mkWitness(Ljava/lang/Object;)Lshapeless/Witness;
Em uma pesquisa rápida, encontrei um semelhante a estePergunta, questão. o que sugere que o motivo disso se deve ao fato de o spark e o pureConfig dependerem do Shapeless, mas com versões diferentes,
Eu tenteisombreie como sugerido na resposta
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("shapeless.**" -> "shadeshapless.@1")
.inLibrary("com.github.pureconfig" %% "pureconfig" % "0.7.0").inProject
)
mas não funcionou tão bem, pode ser por um motivo diferente? alguma idéia do que pode funcionar?
obrigado