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

n1bvdmb6  于 2021-05-22  发布在  Spark
关注(0)|答案(1)|浏览(321)

我正在azure databricks笔记本中编写pyspark代码,在笔记本的末尾,我需要将结果写回3个不同的位置(databricks数据库中的2个表和adls中的1个文件夹),我有3个不同的函数(writeresultstotable1、writeresultstotable2、,writeresultstoadls)并在我的主函数中调用它们,因此有3行代码用于执行此操作,但我希望结果应成功写入所有3个位置,或者不写入任何位置,即所有3行代码在我的主函数中成功运行,或者没有
有人可以建议一些方法来实现这一点,在databricks使用pyspark?

xxe27gdn

xxe27gdn1#

正如史蒂文提到的,Spark是不符合酸。但是,您可以创建另一个表来跟踪结果是否写入表1、表2和ADL。这将允许您创建一个重试逻辑,并允许您的进程是“原子的”。
为此,用于跟踪流程的表可以有5列:
进程名称
当前时间戳
检查是否写入表1的标志
检查是否写入表2的标志
用于检查是否写入ADL的标志
在笔记本的开头,您可以编写逻辑来检查该进程的最新时间戳,并确保所有三个标志都指示为最新时间戳写入的结果。如果其中一个标志指示结果未写入,则逻辑应指示它使用数据的当前状态写入相应的目标表/adl。
注意:只在每个表/adl被写入后更新每个写入步骤的标志。

相关问题