У меня есть четкое представление о том, как Spark разбивает данные на разделы внутри исполнителей, затем каждый раздел обрабатывается и затем агрегируется до окончательного «логического» кадра данных.
Однако, используя окна, я чувствую, что данные каждого окнадолжен быть в одном разделе, чтобы каждый исполнитель имел все свои данные локально? Или данные все еще разделяются, а затем агрегируются с помощью какой-то магии?
Пример такого окна:
val window = Window
.partitionBy("partition-col")
.orderBy("order-col")
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
myDF.withColumn("sum", sum("aCol").over(window))
Как Spark справляется с этим? Насколько эффективно использовать Windows?
Что если я обработаю, скажем, 50 столбцов из окна? Может ли это вызвать много сетевых обменов, или каждое окно будет обрабатываться локально?