Spark 找不到 postgres jdbc 驱动程序
Spark cannot find the postgres jdbc driver
编辑:见最后的编辑
首先,我在 Amazon EMR 上使用 Spark 1.5.2,并将 Amazon RDS 用于我的 postgres 数据库。其次是我在这个 Spark、Hadoop 和 MapReduce 的世界里完全是个新手。
基本上我的问题和这个人一样:
所以数据框已加载,但是当我尝试对其进行评估时(执行 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
并将驱动程序 class 指定为 DataFrameReader
/ DataFrameWriter
的选项
val df = sqlContext.read.format("jdbc").options(Map(
"url" -> url, "dbtable" -> table, "driver" -> "org.postgresql.Driver"
)).load()
甚至手动将所需的 jars 复制给工作人员并将它们放在 CLASSPATH
.
的某个位置
编辑:见最后的编辑
首先,我在 Amazon EMR 上使用 Spark 1.5.2,并将 Amazon RDS 用于我的 postgres 数据库。其次是我在这个 Spark、Hadoop 和 MapReduce 的世界里完全是个新手。
基本上我的问题和这个人一样:
所以数据框已加载,但是当我尝试对其进行评估时(执行 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
并将驱动程序 class 指定为 DataFrameReader
/ DataFrameWriter
val df = sqlContext.read.format("jdbc").options(Map(
"url" -> url, "dbtable" -> table, "driver" -> "org.postgresql.Driver"
)).load()
甚至手动将所需的 jars 复制给工作人员并将它们放在 CLASSPATH
.