rangeBetween (fönster)

Skapar en WindowSpec med de definierade ramgränserna, från start (inkluderande) till end (inkluderande).

Både start och end är relativa från den aktuella raden. Till exempel 0 betyder "aktuell rad", -1 betyder en före den aktuella raden och 5 betyder fem efter den aktuella raden.

En intervallbaserad gräns baseras på det faktiska värdet för uttrycken ORDER BY . En förskjutning ändrar värdet ORDER BY för uttrycket , till exempel om det aktuella ORDER BY värdet är 10 och den lägre bundna förskjutningen är -3, blir 7den resulterande lägre gränsen . Därför kräver intervallbaserade ramar exakt ett ORDER BY uttryck med en numerisk datatyp, såvida inte förskjutningen är obundna.

Syntax

Window.rangeBetween(start, end)

Parameters

Parameter Type Beskrivning
start int Gränsstart, inkluderande. Ramen är obundna om det här är , eller något värde som är Window.unboundedPrecedingmindre än eller lika med max(-sys.maxsize, -9223372036854775808).
end int Gränsslut, inkluderande. Ramen är obundet om det här är , eller något värde som är Window.unboundedFollowingstörre än eller lika med min(sys.maxsize, 9223372036854775807).

Retur

WindowSpec

Notes

Använd Window.unboundedPreceding, Window.unboundedFollowingoch Window.currentRow för att ange särskilda gränsvärden i stället för att använda integralvärden direkt.

Exempel

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