Spark无法找到postgres jdbc驱动程序

Nor*_*sul 1 postgresql jdbc driver apache-spark

编辑:查看最后的编辑

首先,我在Amazon EMR上使用Spark 1.5.2并在我的postgres数据库中使用Amazon RDS.其次,我是Spark和Hadoop以及MapReduce这个世界的新手.

基本上我的问题与这个人一样: java.sql.SQLException:在将DataFrame加载到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
Run Code Online (Sandbox Code Playgroud)

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

spark-shell --driver-class-path /home/hadoop/postgresql-9.4.1207.jre7.jar
Run Code Online (Sandbox Code Playgroud)

解决方案建议将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
Run Code Online (Sandbox Code Playgroud)

解决这个问题?我刚刚将路径作为参数添加到它看起来更多的标志中.

zer*_*323 6

spark-shell --driver-class-path .... --jars ...因为列出的所有jar文件--jars都是自动分布在集群上的.

或者你可以使用

spark-shell --packages  org.postgresql:postgresql:9.4.1207.jre7
Run Code Online (Sandbox Code Playgroud)

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

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

甚至手动将所需的罐子复制到工人身上,并将这些罐子放在工作的某个地方CLASSPATH.