pyspark 三角洲湖的ACID交易

ncgqoxb0  于 4个月前  发布在  Spark
关注(0)|答案(1)|浏览(75)

我使用Azure Databricks和Python Notebooks来转换数据并将其存储在一个Delta Lake表中。有多个这样的Notebooks通过Azure DataFactory运行,并且它们是并行执行的,因此可能会发生甚至15个不同的pyspark进程将尝试同时将数据写入一个输出Delta Lake表。
我能想到两种方法,但也许我只是把事情复杂化了?
A)所有进程都将输出写入自己的临时表,然后我将创建一个笔记本,它将在所有进程完成后运行,并将从临时表收集数据到主输出表。
B)我将按唯一标识进程的列对表进行分区。这应该确保任何写入数据的进程都将写入不同的磁盘。但是,仍然有一个关于数据版本的公共元数据文件可能会损坏?
我该怎么做才能确保所有进程在同一时间写入的数据都以ACID方式存储?

41ik7eoe

41ik7eoe1#

我建议使用一种策略,将表分区和利用DeltaLake内置的并发控制特性结合起来。

  • 每个进程写入到自己的分区,有效地隔离数据并最大限度地减少干扰的机会这意味着更快和更有效的写入:每个进程处理表中较小的单独部分。
  • Delta Lake的并发控制:Delta Lake可以处理并发写入。它使用乐观并发,因此允许多个进程同时尝试写入。如果发生冲突,Delta Lake会自动解决,其中一个写入成功,其他进程重试。因此,无需人工干预即可维护数据完整性。

相关问题