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
很容易收集。
我有一个关于 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
很容易收集。