rangeBetween (Window)
Crée un WindowSpec avec les limites d’image définies, de start (inclus) à end (inclus).
Les deux start et end sont relatifs à la ligne actuelle. Par exemple, 0 signifie « ligne actuelle », -1 signifie une avant la ligne actuelle, et 5 signifie cinq après la ligne actuelle.
Une limite basée sur une plage est basée sur la valeur réelle de l'expression ou des expressions ORDER BY. Un décalage modifie la valeur de l'expression ORDER BY — par exemple, si la valeur ORDER BY actuelle est 10 et que le décalage de la limite inférieure est -3, la limite inférieure résultante est 7. Pour cette raison, les cadres basés sur une plage nécessitent exactement une expression ORDER BY avec un type de données numérique, sauf si le décalage est illimité.
Syntaxe
Window.rangeBetween(start, end)
parameter
parameter | Type | Description |
|---|---|---|
| int | Boundary start, inclus. Le cadre est illimité si cette valeur est |
| int | Fin de limite, inclusive. Le cadre est illimité si c'est |
Renvoie
WindowSpec
Notes
Utilisez Window.unboundedPreceding, Window.unboundedFollowing et Window.currentRow pour spécifier des valeurs limites spéciales plutôt que d'utiliser directement des valeurs intégrales.
Exemples
from pyspark.sql import Window, functions as sf
df = spark.createDataFrame(
[(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")], ["id", "category"])
# Calculate the sum of id where the id value falls within [current id, current id + 1]
# in each category partition.
window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category").show()
# +---+--------+---+
# | id|category|sum|
# +---+--------+---+
# | 1| a| 4|
# | 1| a| 4|
# | 1| b| 3|
# | 2| a| 2|
# | 2| b| 5|
# | 3| b| 3|
# +---+--------+---+