Spark 2中窗口函数的并行性

时间:2017-06-14 09:56:51

标签: apache-spark window-functions

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

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

编辑:

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

1 个答案:

答案 0 :(得分:2)

如果您定义为Window.partitionBy(lit(0))或者根本没有定义partitionBy,则partitions的所有dataframe都将为collected作为一对一executor,而executor将在整个aggregating上执行dataframe功能。因此parallelism将不会被保留。

该集合与collect()函数不同,因为collect()函数会将所有partitions收集到driver节点,但partitionBy函数会将数据收集到{ {1}} executor很容易被收集。