Spark 找不到 postgres jdbc 驱动程序

Posted

技术标签:

【中文标题】Spark 找不到 postgres jdbc 驱动程序【英文标题】:Spark cannot find the postgres jdbc driver 【发布时间】:2016-01-20 23:37:54 【问题描述】:

编辑:查看最后的编辑

首先,我在 Amazon EMR 上使用 Spark 1.5.2,并将 Amazon RDS 用于我的 postgres 数据库。其次,我是 Spark、Hadoop 和 MapReduce 世界的新手。

基本上我的问题和这个人一样: java.sql.SQLException: No suitable driver found when loading DataFrame into Spark SQL

因此加载了数据框,但是当我尝试评估它时(执行 df.show(),其中 df 是数据框)给了我错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://mypostgres.cvglvlp29krt.eu-west-1.rds.amazonaws.com:5432/mydb

我应该注意我是这样开始火花的:

spark-shell --driver-class-path /home/hadoop/postgresql-9.4.1207.jre7.jar

解决方案建议将 jar 传递到工作节点并以某种方式在它们上设置类路径,我真的不明白该怎么做。但是后来他们说显然这个问题在 Spark 1.4 中得到了解决,而我正在使用 1.5.2,但仍然有这个问题,所以这是怎么回事?

编辑:看起来我解决了这个问题,但是我仍然不太明白为什么这有效而上面的事情没有,所以我想我现在的问题是为什么要这样做:

spark-shell --driver-class-path /home/hadoop/postgresql-9.4.1207.jre7.jar --conf spark.driver.extraClassPath=/home/hadoop/postgresql-9.4.1207.jre7.jar --jars /home/hadoop/postgresql-9.4.1207.jre7.jar

解决问题?我只是将路径作为参数添加到其他一些标志中。

【问题讨论】:

【参考方案1】:

spark-shell --driver-class-path .... --jars ... 有效,因为--jars 中列出的所有 jar 文件都会自动分布在集群中。

你也可以使用

spark-shell --packages  org.postgresql:postgresql:9.4.1207.jre7

并将驱动程序类指定为DataFrameReader / DataFrameWriter 的选项

val df = sqlContext.read.format("jdbc").options(Map(
  "url" -> url, "dbtable" -> table, "driver" -> "org.postgresql.Driver"
)).load()

甚至手动将所需的 jar 复制给工作人员,并将它们放在 CLASSPATH 上的某个位置。

【讨论】:

以上是关于Spark 找不到 postgres jdbc 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Spark JDBC 找不到临时表

Pyspark:java.lang.ClassNotFoundException:找不到数据源:com.microsoft.sqlserver.jdbc.spark(SQL 数据池)

找不到适合数据库类型的 JDBC 驱动程序:当 jar 文件存在时,PostgreSQL 与 Teamcity

无法在Postgres中实例化外部Hive Metastore /在类路径中找不到驱动程序

JDBC Spark 连接

获取 PSQLException:错误:在带有 Postgres 的 spark jdbc 中使用查询而不是表名时在“SELECT”处或附近出现语法错误