rangeBetween (okno)

Vytvoří s WindowSpec definovanými hranicemi rámce od start (včetně) do end (včetně).

Obě start a end jsou relativní z aktuálního řádku. Například 0 znamená "aktuální řádek", -1 znamená jeden před aktuálním řádkem a 5 znamená pět za aktuálním řádkem.

Hranice založená na rozsahu je založena na skutečné hodnotě výrazů ORDER BY . Posun změní hodnotu výrazu ORDER BY , například pokud je ORDER BY aktuální 10 hodnota a dolní mez posunu je -3, výsledná dolní mez je 7. Z tohoto důvodu vyžadují rámce založené na rozsahu přesně jeden ORDER BY výraz s číselným datovým typem, pokud není posun nevázaný.

Syntaxe

Window.rangeBetween(start, end)

Parametry

Parameter Typ Description
start int (integer) Začátek hranice včetně. Rámec je nevázaný, pokud je Window.unboundedPrecedingtato hodnota nebo jakákoli hodnota menší nebo rovna max(-sys.maxsize, -9223372036854775808).
end int (integer) Konec hranice včetně. Rámec je nevázaný, pokud je Window.unboundedFollowingtato hodnota nebo jakákoli hodnota větší nebo rovna min(sys.maxsize, 9223372036854775807).

Návraty

WindowSpec

Poznámky

Použijte Window.unboundedPreceding, Window.unboundedFollowinga Window.currentRow k určení speciálních hraničních hodnot místo použití integrálních hodnot přímo.

Příklady

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