Pandas 三角洲湖:性能挑战

Pandas 三角洲湖:性能挑战,pandas,delta-lake,Pandas,Delta Lake,方法1:我的输入数据是一堆json文件。预处理后,输出为数据帧格式,将写入Azure SQL数据库表 方法2:我实现了delta lake,其中输出数据帧转换为Spark数据帧,然后将数据插入到分区的delta表中。该过程很简单,而且将pandas数据帧转换为spark数据帧所需的时间以毫秒为单位。但与方法1相比,性能很差。使用方法1,我能够在不到方法2所需时间一半的时间内完成 我尝试了不同的优化技术,比如ZORDER、compression(装箱),使用insertInto而不是saveAsT

方法1:我的输入数据是一堆json文件。预处理后,输出为数据帧格式,将写入Azure SQL数据库表

方法2:我实现了delta lake,其中输出数据帧转换为Spark数据帧,然后将数据插入到分区的delta表中。该过程很简单,而且将pandas数据帧转换为spark数据帧所需的时间以毫秒为单位。但与方法1相比,性能很差。使用方法1,我能够在不到方法2所需时间一半的时间内完成

我尝试了不同的优化技术,比如ZORDER、compression(装箱),使用insertInto而不是saveAsTable。但没有一个真正提高了性能

如果我错过了任何性能调整方法,请告诉我。如果没有,我很想知道为什么三角洲湖的表现不如熊猫+数据库方法。而且,我很高兴知道其他更好的方法。例如,我遇到达斯克

非常感谢您提前回答

问候,,
柴坦尼亚

你没有提供足够的信息来回答你的问题。在数据接收的整个过程中,到底有什么没有被执行

Z排序不会给您带来优势,如果您正在将数据处理到delta lake中,它更有可能会减慢您的速度。在以后读取数据时,它为您提供了一个优势。Z-ordering by example ID,尝试将具有相同ID的列保存在相同的文件中,这将使spark能够使用dataskipping来避免读取不必要的数据

你的数据到底有多大?如果我们最后讨论的是几GB的数据,那么传统的数据库将执行得更快

我可以给你举个例子:

假设您有一个每天处理4GB数据的批处理作业。如果只是为了处理4GB存储空间,spark就不必像我前面提到的那样执行得更快

但是现在考虑一下,你有一年的工作,在年底给你1.5个TB数据。现在,您可以对整个数据历史执行分析,在这种情况下,您可能会比数据库和应用程序快得多

作为旁注,您说您正在阅读一组json文件,以将它们转换为pandas,而不是delta lake。 如果在方法2中没有具体的原因,我只会使用:

spark.read.json("path")

避免将其从pandas转换为spark数据帧的过程。

非常感谢您的快速回复和帮助