Apache spark 如何并行插入Delta表

Apache spark 如何并行插入Delta表,apache-spark,pyspark,databricks,azure-databricks,delta-lake,Apache Spark,Pyspark,Databricks,Azure Databricks,Delta Lake,我有一个进程,在一个非常强大的集群上,在短时间内并行运行100多个相同的databricks笔记本。每个笔记本在其进程结束时将大约100行数据写入存储在Azure Gen1 DataLake中的相同Delta Lake表。我看到Delta的插入时间非常长,因为我只能假设Delta在插入时会锁定表,然后在单个笔记本完成后释放它,基于读取,这意味着不存在插入冲突,跨多个集群的多个写入程序可以同时插入数据 对于100+笔记本,每个笔记本插入100行需要3个多小时。导致瓶颈的当前代码是: df.writ

我有一个进程,在一个非常强大的集群上,在短时间内并行运行100多个相同的databricks笔记本。每个笔记本在其进程结束时将大约100行数据写入存储在Azure Gen1 DataLake中的相同Delta Lake表。我看到Delta的插入时间非常长,因为我只能假设Delta在插入时会锁定表,然后在单个笔记本完成后释放它,基于读取,这意味着不存在插入冲突,跨多个集群的多个写入程序可以同时插入数据

对于100+笔记本,每个笔记本插入100行需要3个多小时。导致瓶颈的当前代码是:

df.write.format(“delta”).mode(“append”).save(“”)


目前,此表上没有分区,这可能是一个修复方法,但在执行此操作之前,我是否缺少一些关于如何并行获得无冲突插入的信息?

您必须在表的两种隔离级别之间进行选择,较弱的是默认隔离级别,因此,不存在脱离隔离级别的情况。

Delta Lake具有OCC(乐观并发控制),这意味着要写入表的数据将根据其他99个进程要写入的所有数据进行验证。这意味着正在进行100*100=10000次验证。

请记住,当100个笔记本中的最后一个笔记本完成时,您的数据处理架构将完成。也许100本笔记本中的一本或多本需要3个小时才能完成,而插页不是罪魁祸首

如果长时间运行的笔记本不是这样,我建议您尝试将每个笔记本的结果数据存储在某种数据结构中(例如,将其存储在每个笔记本的100个文件中),然后将数据结构(例如文件)的数据批量插入到目标表中


数据处理将是并行的,插入将不是并行的。

好的,非常感谢您的输入,我可以处理这个。