Share via


Vensterklasse

Hulpprogrammafuncties voor het definiƫren van vensters in DataFrames.

Ondersteunt Spark Connect

Klassekenmerken

Attribute Beschrijving
unboundedPreceding Grenswaarde die het begin van een niet-afhankelijk vensterkader aangeeft.
unboundedFollowing Grenswaarde die het einde van een niet-afhankelijk vensterkader aangeeft.
currentRow Grenswaarde die de huidige rij in een vensterkader vertegenwoordigt.

Methods

Methode Beschrijving
orderBy(*cols) Hiermee maakt u een WindowSpec met de volgorde die is gedefinieerd.
partitionBy(*cols) Hiermee maakt u een WindowSpec met de partitionering gedefinieerd.
rangeBetween(start, end) Hiermee maakt u een WindowSpec met de framegrenzen die zijn gedefinieerd, van start (inclusief) tot end (inclusief), met behulp van verschuivingen op basis van bereik van de waarde van ORDER BY de huidige rij.
rowsBetween(start, end) Hiermee maakt u een WindowSpec met de framegrenzen die zijn gedefinieerd, van start (inclusief) tot end (inclusief), met behulp van op rijen gebaseerde offsets van de huidige rij.

Aantekeningen

Wanneer ordenen niet is gedefinieerd, wordt standaard een niet-afhankelijk vensterframe (rowFrame, unboundedPreceding, unboundedFollowing) gebruikt. Wanneer volgorde is gedefinieerd, wordt standaard een groeiend vensterframe (rangeFrame, unboundedPreceding, currentRow) gebruikt.

Examples

Basisvenster met volgorde en rijkader

from pyspark.sql import Window

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

Gepartitioneerd venster met bereikframe

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)

Rijnummer binnen partitie

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()

Som uitvoeren met frame op basis van rijen

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()

Som uitvoeren met frame op basis van bereik

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()