5

我正在尝试通过 JDBC 编写:

df.write.jdbc("jdbc:postgresql://123.123.123.123:5432/myDatabase", "myTable", props)

Spark 文档解释说,如果在客户端模式(Dataproc 运行的模式)下运行,则配置选项不能spark.driver.extraClassPath用于添加 JDBC 驱动程序 JAR,因为 JVM 已经启动。

我尝试在 Dataproc 的提交命令中添加 JAR 路径:

gcloud beta dataproc jobs submit spark ... 
     --jars file:///home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar

我还添加了加载驱动程序的命令:

  Class.forName("org.postgresql.Driver")

但我仍然得到错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://123.123.123.123:5432/myDatabase 
4

3 回答 3

4

根据我的经验,添加driver属性通常可以解决问题:

props.put("driver", "org.postgresql.Driver")
db.write.jdbc(url, table, props)
于 2015-10-05T21:53:53.310 回答
2

您可能想尝试--driver-class-path在命令参数的最后添加:

gcloud beta dataproc jobs submit spark ... 
    --jars file:///home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar \
    --driver-class-path /home/bryan/org.postgresql.postgresql-9.4-1203-jdbc41.jar

如果您在作业之前将 jarfile 暂存到集群上,另一种方法是将所需的 jarfile 转储到/usr/lib/hadoop/lib/它应该自动成为 Hadoop 和 Spark 作业的驱动程序类路径的一部分的位置。

于 2015-10-05T22:20:03.750 回答
0

通过 Dataproc 提交 Spark 作业时,您可以使用参数将 jar(来自--jars参数)添加到 Spark Driver 类路径:--properties

$ gcloud dataproc jobs submit spark ... \
    --jars=gs://<BUCKET>/<DIRECTORIES>/<JAR_NAME> \
    --properties=spark.driver.extraClassPath=<JAR_NAME>
于 2018-04-20T04:48:17.050 回答