Spark 2 中 window 函数的并行性

Parallelism of window-functions in Spark 2

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

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

编辑:

特别是对于 "rolling" 操作(例如使用 avg(...).Window.partitionBy(lit(0)).orderBy(...).rowsBetween(-10,10) 之类的滚动平均值),即使所有数据都位于 [= =23=] 因为一次只需要 20 行来计算平均值

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

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