Spark 2中窗口函数的并行性

问题描述 投票:1回答:1

我有一个关于Spark窗口函数的相当简单(但必不可少)的问题(例如lead, lag, count, sum, row_number等):

如果将我的窗口指定为Window.partitionBy(lit(0))(即我需要在整个数据帧中运行窗口函数),窗口聚合函数是否并行运行,或者所有记录都移动到一个单独的任务中?

编辑:

特别是对于“滚动”操作(例如使用类似avg(...).Window.partitionBy(lit(0)).orderBy(...).rowsBetween(-10,10)的滚动平均值),这个操作很可能被分成不同的任务,即使所有数据都在窗口的同一个分区中,因为一次只需要20行来计算平均

apache-spark window-functions
1个回答
2
投票

如果你定义为Window.partitionBy(lit(0))或者你根本没有定义partitionBy,那么所有partitionsdataframe将是collected作为一个executor并且executor将在整个aggregating上执行dataframe函数。所以parallelism将不会被保留。

该集合不同于collect()函数,因为collect()函数将所有partitions收集到driver节点,但partitionBy函数将收集数据到executor,其中partitions易于收集。

© www.soinside.com 2019 - 2024. All rights reserved.