我收到此错误
py4j.protocol.Py4JJavaError: An error occurred while calling o38.jdbc. : java.lang.ClassNotFoundException: org.postgresql.Driver
Here is my docker-compose file
postgresdb:
image: postgres:13
ports:
- '5432:5432'
volumes:
- type: bind
source: ./data
target: /opt/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # create table customer
environment:
POSTGRES_DB: db
POSTGRES_USER: test
POSTGRES_PASSWORD: test
And this is how I config in pyspark
jdbc_url = "jdbc:postgresql://localhost:5432/db"
connection_properties = {
"user": "test",
"password": "test",
"driver": "org.postgresql.Driver"
}
result.write.jdbc(url=jdbc_url, table="customers", mode="overwrite", properties=connection_properties)
我想知道如何解决这个问题。我需要在 dockerfile 中安装 postgres13 的 jar 文件吗?
看起来您还没有下载 PostgreSQL JDBC 驱动程序 JAR,请从 Maven Central 下载。 现在使用以下命令将 JAR 放入 Spark 的 jars 目录中;
cp postgresql-<version>.jar /path/to/spark/jars/
Now try the code under to configure Spark so that it wil start using the driver JAR which you just downloaded.
spark = SparkSession.builder \
.appName("YourAppName") \
.config("spark.driver.extraClassPath", "/path/to/spark/jars/postgresql-<version>.jar") \
.getOrCreate()
现在您可以使用当前代码写入 PostgreSQL。尝试下面的命令,但将 更改为您稍后下载的 JDBC 驱动程序的实际版本。
希望它能解决您的问题:)