2017-08-17 32 views
1

我想將PostgreSQL數據庫鏈接到scala/spark項目。Scala java.lang.NoClassDefFoundError:org/postgresql/Driver

我寫build.sbt

name := "Hermes" 
version := "1.0" 
scalaVersion := "2.10.6" 
libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-sql" % "2.2.0", 
    "org.apache.spark" %% "spark-core" % "2.0.1", 
    "org.apache.spark" %% "spark-mllib" % "2.0.1", 
    "org.postgresql" % "postgresql" % "42.1.1" 
) 

,我已經連接的方法:

def getDatasetFromSql(query: String): Dataset[Row] = { 
val options = Map(
    "driver" -> "org.postgresql.Driver", 
    "url" -> createConnection, 
    "dbtable" -> query 
) 
val fromSqlDs: Dataset[Row] = spark.read.format("jdbc").options(options).load 
fromSqlDs.cache.printSchema() 
fromSqlDs 
} 

有,當我用膠帶SBT包沒有異常拋出,但是當我火花提交我的代碼,我拋出了這個異常java.lang.NoClassDefFoundError:org/postgresql/Driver

我已經在這裏檢查了一些答案,關於使用classOf [org.postgresql.driver]SparkConf().setJars()。在這一點上沒有成功。

我該如何做這項工作?

回答

3

我曾經遇到過類似的問題。所以在第一次嘗試時,我下載了postgres驅動程序並將其保存在特定路徑中。然後運行火花應用程序,如下所示:

sbt package 
spark-submit --driver-class-path ~/jarDir/p‌​ostgresql-9.3-1102-j‌​dbc41.jar target/scala-2.10/simple-project_2.10-1.0.jar 

因爲我正在與Ambari合作。因此,將postgres驅動程序直接添加到自定義參數中。因此,下次在運行命令時不需要傳遞postgres驅動程序。希望能幫助到你。

+0

謝謝。我沒有使用好的jar文件 – Baerrow