pyspark 在docker中编写spark脚本到postgres错误:java.lang.ClassNotFoundException:org.postgresql.Driver

hec6srdp  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(128)

我得到了这个错误

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文件吗?

egmofgnx

egmofgnx1#

看起来你还没有下载PostgreSQL JDBC驱动程序,请从Maven Central下载。现在使用下面的命令将这个文件夹放到Spark的jars目录中:

cp postgresql-<version>.jar /path/to/spark/jars/

现在尝试下的代码来配置Spark,以便它开始使用您刚刚下载的驱动程序。

spark = SparkSession.builder \
    .appName("YourAppName") \
    .config("spark.driver.extraClassPath", "/path/to/spark/jars/postgresql-<version>.jar") \
    .getOrCreate()

现在你可以使用你当前的代码写PostgreSQL了。尝试下的命令,但请使用稍后下载的JDBC驱动程序的实际版本更改。

相关问题