在 Apache spark SQL 中,我们可以回滚事务吗

Posted

技术标签:

【中文标题】在 Apache spark SQL 中,我们可以回滚事务吗【英文标题】:In Apache spark SQL can we roll back the transactions 【发布时间】:2015-09-29 10:13:53 【问题描述】:

我想让 spark sql 用于数据持久化,在这种情况下,我可以使用回滚数据来保存我们持久化的数据。例如。

假设我们有 3 个表 t1、t2 和 t3。 t1 和 t2 表数据已成功持久化,但 t3 在数据完整性级别上有些失败。所以我可以回滚我坚持的 t1 和 t2 数据。

我的意思是我可以回滚交易吗?

【问题讨论】:

【参考方案1】:

查看 Spark 代码(v1.6.2 到 v2.1.0),似乎甚至没有选项可以指定 何时 提交,也没有回滚。

假设您保存/写入数据帧,最终会调用 savePartition 并以:

  if (supportsTransactions) 
    conn.commit()
  

来源: https://github.com/apache/spark/blob/v2.1.0/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala#L602-L604

您始终可以考虑自己在源代码中添加此功能 :)(以及向上游拉取请求!)

【讨论】:

以上是关于在 Apache spark SQL 中,我们可以回滚事务吗的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Spark / Spark SQL 加入文件

在 org.apache.spark.sql.types.DataTypes 中找不到 uuid

教程:Apache Spark SQL入门及实践指南!

Spark SQL 会完全取代 Apache Impala 或 Apache Hive 吗?

在Apache Spark中使用UDF

从 org.apache.spark.sql.Row 中提取信息