rangeBetween (okno)

Tworzy obiekt WindowSpec z zdefiniowanymi granicami ramek od start (włącznie) do end (włącznie).

Oba start elementy i end są względne z bieżącego wiersza. Na przykład 0 oznacza "bieżący wiersz", -1 czyli jeden przed bieżącym wierszem i 5 oznacza pięć po bieżącym wierszu.

Granica oparta na zakresie jest oparta na rzeczywistej ORDER BY wartości wyrażeń. Przesunięcie zmienia wartość ORDER BY wyrażenia — na przykład jeśli bieżąca ORDER BY wartość to 10 , a dolne przesunięcie powiązane to -3, wynikową dolną granicą jest 7. W związku z tym ramki oparte na zakresie wymagają dokładnie jednego ORDER BY wyrażenia z typem danych liczbowych, chyba że przesunięcie jest niezwiązane.

Składnia

Window.rangeBetween(start, end)

Parametry

Parameter Typ Opis
start int Początek granicy, włącznie. Ramka jest niezwiązana, jeśli jest Window.unboundedPrecedingto , lub dowolna wartość mniejsza niż lub równa max(-sys.maxsize, -9223372036854775808).
end int Koniec granicy, włącznie. Ramka jest niezwiązana, jeśli jest Window.unboundedFollowingto , lub dowolna wartość większa niż lub równa min(sys.maxsize, 9223372036854775807).

Zwroty

WindowSpec

Notatki

Użyj Window.unboundedPreceding, Window.unboundedFollowingi Window.currentRow , aby określić specjalne wartości granic, a nie bezpośrednio używać wartości całkowitych.

Examples

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