Использование окна для применения агрегатов к нескольким столбцам в фрейме данных в pyspark - PullRequest
0 голосов
/ 30 января 2019

Можно ли применить агрегатные функции к нескольким столбцам в окне информационного блока в pyspark?

Например, я знаю, что могу сделать что-то вроде этого:

from pyspark.sql.window import Window
import pyspark.sql.functions as f

columns = ["id", "x","y",  "timestamp"]
values = [
    (1, 1, "test","2018-12-31"),
    (1, 3, "test","2018-11-30"),
    (1, 5, "test1","2018-09-30"),
    (1, 2, "test1","2018-08-31")]

df = spark.createDataFrame(values, columns)
df = df.withColumn("date", f.to_date("timestamp", "yyyy-MM-dd"))
w = Window.partitionBy("x").orderBy("date").rowsBetween(-(3 - 1), 0)

Сейчасесли я хочу применить агрегирование ко всем столбцам:

agg_list = [f.avg, f.sum, f.max, f.min]
for c in df.columns[1:3]:
    for af in agg_list:
        df = df.withColumn(str(c) + '_'+ af.__name__, af(c).over(w))

Это работает нормально, но я хотел бы знать, есть ли лучший способ сделать это?Я знаю, что в groupBy я могу применить эти агрегаты в одном выражении ко всем столбцам, не записывая все для циклов, существует ли аналогичный подход, но для Windows?

Особенно для больших наборов данных и нескольких временных окон, это, кажется, занимает много времени.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...