Scala java.lang.NoClassDefFoundError:org / postgresql / Driver

时间:2017-08-17 13:00:29

标签: postgresql scala apache-spark

我正在尝试将PostgreSQL数据库链接到scala / spark项目。

我写了 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()。目前没有成功。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:3)

我曾经遇到过类似的问题。所以在第一次尝试时我已经下载了postgres驱动程序并将其保存在特定路径中。然后运行spark应用程序,如下所示:

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驱动程序。希望它有所帮助。