【问题标题】:Pyspark: writing data to Postgres using JDBCPyspark:使用 JDBC 将数据写入 Postgres
【发布时间】:2020-10-09 15:59:19
【问题描述】:

1) 我正在从 Postgres 读取如下表格并创建一个数据框

df = spark.read.format("jdbc").option("url", url). \
                        option("query", "SELECT * FROM test_spark"). \
                            load()

2) 更新数据框df中的一个值

newDf = df.withColumn('id',F.when(df['id']==10,20).otherwise(df['id']))

3) 我正在尝试将数据插入 Postgres 表。

--下面的代码是清除表格数据

newDf.write.mode("overwrite").option("upsert", True).\
        option("condition_columns", "id").option("truncate", True).\
        format("jdbc").option("url", url).option("dbtable", "test_spark").save()

--下面的代码工作正常。

newDf.write.mode("overwrite").option("upsert", True).\
        option("condition_columns", "id").option("truncate", True).\
        format("jdbc").option("url", url).option("dbtable", "test_spark1").save()

问题:当我尝试将更新的数据帧写回同一个表(即 test_spark)时,表数据被清除,但当它是新表(即不存在的表)时,它工作正常。

【问题讨论】:

    标签: postgresql jdbc pyspark


    【解决方案1】:

    通过在将数据帧写入数据库表之前将数据帧写入检查点目录来解决问题,如下面的代码所示

         sparkContext.setCheckpointDir('checkpoints')
         newDf.checkpoint().write.format("jdbc").option("url", url).option("truncate", "true").mode("overwrite").\
                    option("dbtable", "spark_test").save()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2017-05-14
      相关资源
      最近更新 更多