我正在尝试通过JDBC编写:
df.write.jdbc("jdbc:postgresql://123.123.123.123:5432/myDatabase", "myTable", props)
Spark docs解释说,如果在JVM已经启动的情况下以客户端模式运行(这是Dataproc运行的模式),则配置选项spark.driver.extraClassPath
不能用于添加JDBC驱动程序JAR。 / p>
我尝试在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
答案 0 :(得分:4)
根据我的经验,将driver
添加到属性通常可以解决问题:
props.put("driver", "org.postgresql.Driver")
db.write.jdbc(url, table, props)
答案 1 :(得分: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
另一种方法是,如果您在作业之前将jar文件暂存到集群上,则将所需的jar文件转储到/usr/lib/hadoop/lib/
,它应该自动成为Hadoop和Spark作业的驱动程序类路径的一部分
答案 2 :(得分:0)
在通过Dataproc提交Spark作业时,可以使用--jars
参数将jar(从--properties
参数)添加到Spark Driver类路径:
$ gcloud dataproc jobs submit spark ... \
--jars=gs://<BUCKET>/<DIRECTORIES>/<JAR_NAME> \
--properties=spark.driver.extraClassPath=<JAR_NAME>