提高窗口函数性能

hgqdbh6s  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(442)

我继承了一些在窗口函数方面产生许多新列的代码。
遗憾的是,所有的窗口函数都在不同的列上分区。在某些情况下,根本没有partitionby子句会进一步降低性能。
将每个窗口实现为groupby是否更有效(如果可能的话),而是生成新列并基于groupby键将每个新列加入。分区的数量很小,所以实际的连接本身很便宜,可以广播。
有没有办法在没有分区的情况下优化winsow函数?我已经读到可以使用一个虚拟分区键,例如lit(0),但这肯定仍然会导致在单个分区中执行排序?
干杯
特里

dtcbnfnu

dtcbnfnu1#

因此,在某些场景中,使用agg和可选的groupby似乎可以获得显著的性能提升。
在我的例子中,我有多个窗口函数的秩。
我创建了一个单独的dataframes,为相同的分区和顺序计算min。
这些Dataframe中的每一个都返回一行(其中未定义窗口中的partitionby子句)或少数指定了partitionby子句的行。
显然,这会带来开销,但是在一些Dataframe中计算这些最小值并执行广播连接以添加相关列要比使用窗口函数便宜得多。
显然,这种方法只适用于某些场景-如果您使用的是类似于lag的东西,那么您可能会被窗口函数卡住。。。

相关问题