gpt4 book ai didi

apache-spark - Spark : how is a window-based processing splitted to executors?

转载 作者:行者123 更新时间:2023-12-04 05:05:43 25 4
gpt4 key购买 nike

我清楚地了解 Spark 如何将数据拆分到执行程序中的分区,然后处理每个分区,然后聚合直到最终的“逻辑”数据帧。

但是使用Windows,我觉得每个窗口数据都应该在一个分区中,以便每个执行器都在本地拥有所有数据?还是数据还是 split 了,然后用一种魔法聚合起来?

这种窗口的一个例子是:

val window = Window
.partitionBy("partition-col")
.orderBy("order-col")
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
myDF.withColumn("sum", sum("aCol").over(window))

Spark 如何处理这个问题?使用 Windows 的性能如何?

如果我处理,比如说 Window 中的 50 列怎么办?可能会产生大量的网络交换,还是每个窗口都会在本地处理?

最佳答案

为了计算窗口函数 Spark 需要排列数据,以便 partitionBy 中提到的列/表达式的值如您所料,被分组在一个分区中。

例如,尝试使用跨越整个数据框的窗口运行函数。您将收到以下警告:

scala> df.withColumn("rn", row_number().over(Window.orderBy(lit(1)))).show
19/10/16 00:08:03 WARN WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.

关于apache-spark - Spark : how is a window-based processing splitted to executors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com