在docker中将spark数据帧写入postgres错误:java.lang.ClassNotFoundException:org.postgresql.Driver

问题描述 投票:0回答:1

我收到此错误

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 docker pyspark jdbc dockerfile
1个回答
0
投票

看起来您还没有下载 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 驱动程序的实际版本。

希望它能解决您的问题:)

© www.soinside.com 2019 - 2024. All rights reserved.