微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Pyspark中确保多行代码的原子性?

如何解决如何在Pyspark中确保多行代码的原子性?

我正在Azure Databricks笔记本中编写Pyspark代码,在笔记本的末尾,我需要将结果写回到3个不同的位置(databricks数据库中的2个表和ADLS中的1个文件夹),并且我具有3个不同的函数(WriteResultsToTable1 ,WriteResultsToTable2,WriteResultsToADLS)为此操作创建,我在主函数调用它们,因此有3行代码可以完成此操作,但是我希望结果要么成功写入所有3个位置,要么都不成功写入所有3行的代码在我的主要功能中成功运行,或者都不成功

有人可以建议使用pyspark在数据砖中实现此目标的某种方法吗?

解决方法

正如史蒂文所说,Spark不符合ACID。但是,您可以创建另一个表来跟踪是否将结果写入Table1,Table2和ADLS。这将使您能够创建重试逻辑并使过程“原子化”。

要执行此操作,用于跟踪流程的表可能有5列:

  1. ProcessName
  2. Current_Timestamp
  3. 用于检查是否写入了表1的标记
  4. 检查表2是否已写入的标记
  5. 检查是否已编写ADLS的标记

在笔记本的开始处,您可以编写逻辑以检查该过程的最新时间戳,并确保所有三个标志均指示为最新时间戳写入了结果。如果其中一个标志指示未写入结果,则您的逻辑应该指示它使用数据的当前状态写入相应的目标表/ ADLS。

请注意:仅在写入每个表/ ADLS之后才更新每个WRITE步骤的标志。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。