gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:13:10 25 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,或使用触发器。

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

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

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