← retour aux snippets

PySpark: fonctions de fenêtre

utiliser Window pour lags, rangs et moyennes mobiles

PySpark: fonctions de fenêtre

objectif

Expliquer et montrer comment utiliser Window pour lags, rangs et moyennes mobiles.

code minimal

from pyspark.sql import Window, functions as F
w = Window.partitionBy("user_id").orderBy("ts").rowsBetween(-2, 0)
df = df.withColumn("mov_avg", F.avg("value").over(w))
df = df.withColumn("lag1", F.lag("value").over(Window.partitionBy("user_id").orderBy("ts")))
df.select("user_id","ts","value","mov_avg","lag1").show(5)

utilisation

# top-N par groupe
w2 = Window.partitionBy("country").orderBy(F.desc("score"))
df_top = df.withColumn("rn", F.row_number().over(w2)).where(F.col("rn") <= 3)

variante(s) utile(s)

# window par range temporel
w3 = Window.partitionBy("user_id").orderBy("ts").rangeBetween(-3600, 0)

notes

  • rowsBetween utilise des offsets en lignes; rangeBetween utilise l’ordre et le type de la colonne.
  • Attention aux partitions déséquilibrées.