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