postgresql - Spark 找不到 postgres jdbc 驱动程序

标签 postgresql jdbc apache-spark driver

编辑:查看最后的编辑

首先,我在 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 的:

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

解决问题了吗?我只是将路径作为参数添加到更多的标志中。

最佳答案

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()

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

关于postgresql - Spark 找不到 postgres jdbc 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912763/

相关文章:

python - Django的manage.py迁移错误

postgresql - docker 对港口的困惑

oracle - JDBC 故障转移连接字符串

java - 我正在尝试通过 mac osx 上的 JDBC 连接 mysql

apache-spark - 从运行在 Kubernetes 集群上的 Spark 独立集群对 Hadoop 集群进行 Kerberos 身份验证

java - 序列化 Lucene StandardAnalyzer 以进行 Apache Spark RDD 映射转换

postgresql - 调整两列与一组整数的比较

jdbc - 是否有用于 BigQuery 的 google 支持的 JDBC 驱动程序?

apache-spark - Spark Structured Streaming foreachBatch 和 UPSERT(合并): to persist or not to persist?

ruby - 无法通过 Sequel 连接到 Postgres