5

私はJDBC経由で書き込もうとしています:

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

Sparkのドキュメントspark.driver.extraClassPathでは、JVM がすでに起動されているため、クライアント モード(Dataproc が実行されるモード)で実行されている場合、構成オプションを使用して JDBC ドライバ JAR を追加することはできないと説明されています。

Dataproc の submit コマンドに 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 に答える