创建并写入数据库 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的主要内容,如果未能解决你的问题,请参考以下文章