首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在写入RDS posgtres时不丢失模式而用PySpark的JDBC覆盖数据?

如何在写入RDS posgtres时不丢失模式而用PySpark的JDBC覆盖数据?
EN

Stack Overflow用户
提问于 2021-05-13 04:25:22
回答 1查看 589关注 0票数 0

我正在使用下面的代码来实现上述功能:

代码语言:javascript
代码运行次数:0
运行
复制
   df.write \
            .format("jdbc") \
            .option("url","some_url") \
            .option("dbtable", "schema.table") \
            .option("user", "db_user_name") \
            .option("password", "pwd") \
            .option("truncate", "true") \
            .mode('append')\
            .save()

我有以下问题:

  1. 是否只对
  2. 进行重写?为什么它不适用于追加?

有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-13 08:18:46

截断附加到的db表不起作用,因为您实际上是试图覆盖表。快速浏览https://spark.apache.org/docs/latest/sql-data-sources-jdbc.htmloption("truncate")显示:

当启用SaveMode.Overwrite时,此选项将导致Spark截断现有表,而不是删除和重新创建它。这可以提高效率,并防止删除表元数据(例如索引)。但是,在某些情况下,例如当新数据有不同的模式时,它将无法工作。默认为false。此选项仅适用于写作。

我假设您想要实现的是pyspark.sql.DataFrame和目标值jdbc表之间的模式验证。根据上面的选项描述,选项truncate=Truemode=overwrite的情况应该是这样的,即模式必须匹配。

如果试图更改目标表的架构,则truncate选项应保持为Falsemode应设置为overwrite

或者,您可以编写自己的模式验证,方法是将整个过程包装在Python函数中,并从pyspark.sql.DataFrame和目标db表中提取模式,然后比较它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67513874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档