3
我想爲我的spark應用程序配置使用pureConfig和configFactory。 這裏是我的代碼:Spark不能用於pureconfig
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"))
當我從IDE(的IntelliJ)運行它,或者直接從Java (即Java的罐子...),它工作正常。
但是當我運行它火花提交失敗,出現以下錯誤:
Exception in thread "main" java.lang.NoSuchMethodError: shapeless.Witness$.mkWitness(Ljava/lang/Object;)Lshapeless/Witness;
從快速搜索,我發現了類似與此類似question。 這表明這樣做的原因是由於火星,pureConfig依賴於無形,但不同的版本,
我試圖shade it作爲答案
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("shapeless.**" -> "[email protected]")
.inLibrary("com.github.pureconfig" %% "pureconfig" % "0.7.0").inProject
)
建議,但沒有奏效以及 它可以從不同的原因? 任何想法可能工作?
感謝
因爲[sbt-assembly中的錯誤](https://github.com/sbt/sbt-assembly/issues/235),您必須在'inLibrary'中提及的庫匹配代碼中添加'scalaVersion'後綴比如'.inLibrary(「com.chuusai」%「shapeless_2.11」%「2.3.2」)' – kaychaks
@kaychaks我實際上遇到過這種情況,並設法忘記。感謝提示,更新了答案。 –
@YuvalItzchakov我認爲火花使用無形狀2.0.0通過微風(http://apache-spark-developers-list.1001551.n3.nabble.com/shapeless-in-spark-2-1-0-td20392.htm) 當我運行你的修復程序時,我得到了以下錯誤:'java.lang.NoClassDefFoundError:shapeless/DefaultSymbolicLabelling' 應該改變火花形狀依賴嗎? –