gpt4 book ai didi

jdbc - SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表

转载 作者:行者123 更新时间:2023-11-29 17:31:19 24 4
gpt4 key购买 nike

我正在尝试使用 Spark SQL DataFrames 和 JDBC 连接在 MySql 上插入和更新一些数据。

我已成功使用 SaveMode.Append 插入新数据。有没有办法从 Spark SQL 更新 MySql 表中已有的数据?

我要插入的代码是:

myDataFrame.write.mode(SaveMode.Append).jdbc(JDBCurl,mySqlTable,connectionProperties)

如果我更改为 SaveMode.Overwrite,它会删除整个表并创建一个新表,我正在寻找类似于 MySql 中可用的“ON DUPLICATE KEY UPDATE”的内容

最佳答案

这是不可能的。目前(Spark 1.6.0/2.2.0 SNAPSHOT)Spark DataFrameWriter 仅支持四种写入模式:

  • SaveMode.Overwrite: overwrite the existing data.
  • SaveMode.Append: append the data.
  • SaveMode.Ignore: ignore the operation (i.e. no-op).
  • SaveMode.ErrorIfExists: default option, throw an exception at runtime.

您可以使用 mapPartitions 手动插入(因为您希望 UPSERT 操作应该是幂等的,因此易于实现)、写入临时表并手动执行 upsert,或使用触发器。

总的来说,实现批量操作的更新插入行为并保持良好的性能绝非易事。您必须记住,在一般情况下,将有多个并发事务(每个分区一个),因此您必须确保不会出现写入冲突(通常通过使用特定于应用程序的分区)或提供适当的恢复过程。在实践中,最好执行批量写入临时表并直接在数据库中解析更新插入部分。

关于jdbc - SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com