创建并写入数据库 JDBC PySpark

Posted

技术标签:

【中文标题】创建并写入数据库 JDBC PySpark【英文标题】:Create and write to a database JDBC PySpark 【发布时间】:2020-10-10 08:19:35 【问题描述】:

我有一个希望写入数据库表的数据框,但是使用以下命令:

df.select("id", "scale", "mentions")\
        .write.format("jdbc") \
        .option("url", "jdbc:postgresql://ec2xxxxamazonaws.com:xxxx/xxxx") \
        .option("dbtable", 'table) \
        .option("user", "xxxx") \
        .option("password", "xxxx") \
        .option("driver", "org.postgresql.Driver").mode('append').save()

我无法写入数据库,因为该表已经存在,因为我通过 DB EC2 实例上的 psql 创建了它。

我的问题是,有没有办法在 spark python 程序本身中创建表、插入查询?

【问题讨论】:

【参考方案1】:

据我所知,您可以简单地使用“追加”的保存模式,以便将数据框插入到 PostgreSQL 上的预先存在的表中。

试试下面的:

df.write.format('jdbc').options(
  url='jdbc:postgresql://ec2xxxxamazonaws.com:xxxx/xxxx',
  driver='org.postgresql.Driver',
  dbtable='table',
  user='xxxx',
  password='xxxx').mode('append').save()

但是,请记住,这仅在表没有约束(即主键列或索引)时才有效。因此,当您的表和插入操作包含更多复杂性时,通常会有更好的实现选项。试试这篇文章作为入门:https://medium.com/@radek.strnad/tips-for-using-jdbc-in-apache-spark-sql-396ea7b2e3d3

【讨论】:

最初我所做的是在我的数据库实例上创建一个表,然后使用 spark 将数据帧插入到该表中,这就是我收到此错误的时候 @gammauniversity 你能给出你的表在PostgreSQL中的模式吗?文档将上述代码作为一种将数据框插入到现有 PostgreSQL 表中的方法。 table (event int not null, numsources int, nummentions int) 这是schema,和我的dataframe一样 @gammauniversity 请发布您收到的错误消息,我们将从那里继续。

以上是关于创建并写入数据库 JDBC PySpark的主要内容,如果未能解决你的问题,请参考以下文章

(Pyspark 使用 JDBC 写入 postgres 失败并出现 NullPointerException

使用 PySpark JDBC 将数据帧写入 Azure SQL 数据库时性能下降

DSX PySpark 使用自定义 JDBC 方言将数据写入 dashDB

如何使用 JDBC 源在 (Pyspark?

如何使用 JDBC 源在 (Pyspark?

如何从数据框中获取 1000 条记录并使用 PySpark 写入文件?