2017-04-25 71 views
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 
) 

建議,但沒有奏效以及 它可以從不同的原因? 任何想法可能工作?

感謝

回答

2

您還可以遮陽無形自己的JAR中,除了pureconfig:

assemblyShadeRules in assembly := Seq(
    ShadeRule.rename("shapeless.**" -> "[email protected]") 
    .inLibrary("com.chuusai" % "shapeless_2.11" % "2.3.2") 
    .inLibrary("com.github.pureconfig" %% "pureconfig" % "0.7.0") 
    .inProject 
) 

確保添加正確的無形的版本。

+0

因爲[sbt-assembly中的錯誤](https://github.com/sbt/sbt-assembly/issues/235),您必須在'inLibrary'中提及的庫匹配代碼中添加'scalaVersion'後綴比如'.inLibrary(「com.chuusai」%「shapeless_2.11」%「2.3.2」)' – kaychaks

+0

@kaychaks我實際上遇到過這種情況,並設法忘記。感謝提示,更新了答案。 –

+0

@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' 應該改變火花形狀依賴嗎? –