Aller au contenu principal

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

start

int

Boundary start, inclus. Le cadre est illimité si cette valeur est Window.unboundedPreceding, ou toute valeur inférieure ou égale à max(-sys.maxsize, -9223372036854775808).

end

int

Fin de limite, inclusive. Le cadre est illimité si c'est Window.unboundedFollowing, ou toute valeur supérieure ou égale à min(sys.maxsize, 9223372036854775807).

parameter

Type

Description

start

int

Boundary start, inclus. Le cadre est illimité si cette valeur est Window.unboundedPreceding, ou toute valeur inférieure ou égale à max(-sys.maxsize, -9223372036854775808).

end

int

Fin de limite, inclusive. Le cadre est illimité si c'est Window.unboundedFollowing, ou toute valeur supérieure ou égale à min(sys.maxsize, 9223372036854775807).

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

Python
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|
# +---+--------+---+