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

问题描述:

我想将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()。在这一点上没有成功。

我该如何做这项工作?

我曾经遇到过类似的问题。所以在第一次尝试时,我下载了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