Třída Okna

Utility functions for defining window in DataFrames.

Podporuje Spark Connect.

Atributy třídy

Vlastnost Description
unboundedPreceding Hodnota hranice představující začátek rámečku nevázaného okna
unboundedFollowing Mezní hodnota představující konec nevázaného rámečku okna
currentRow Hodnota hranice představující aktuální řádek v rámečku okna

Methods

Metoda Description
orderBy(*cols) Vytvoří WindowSpec s definovaným řazením.
partitionBy(*cols) Vytvoří windowSpec s definovaným dělením.
rangeBetween(start, end) Vytvoří WindowSpec s definovanými hranicemi rámce od start (včetně) do end (včetně) pomocí posunů založených na rozsahu od hodnoty aktuálního ORDER BY řádku.
rowsBetween(start, end) Vytvoří WindowSpec s definovanými hranicemi rámce od start (včetně) do end (včetně) pomocí posunů na základě řádků z aktuálního řádku.

Poznámky

Pokud řazení není definované, použije se ve výchozím nastavení nevázaný rámec okna (rowFrame, unboundedPreceding, unboundedFollowing). Při definování řazení se ve výchozím nastavení používá rozrůstající se rámec okna (rangeFrame, unboundedPreceding, currentRow).

Příklady

Základní okno s pořadím a rámečkem řádku

from pyspark.sql import Window

# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)

Dělené okno s rámečkem rozsahu

from pyspark.sql import Window

# PARTITION BY country ORDER BY date RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING
window = Window.orderBy("date").partitionBy("country").rangeBetween(-3, 3)

Číslo řádku v rámci oddílu

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"]
)

# Show row number ordered by id within each category partition
window = Window.partitionBy("category").orderBy("id")
df.withColumn("row_number", sf.row_number().over(window)).show()

Průběžný součet s rámečkem založeným na řádcích

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"]
)

# Sum id values from the current row to the next row within each partition
window = Window.partitionBy("category").orderBy("id").rowsBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category", "sum").show()

Průběžný součet s rámcem založeným na rozsahu

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"]
)

# Sum id values from the current id value to id + 1 within each partition
window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category").show()