Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Verktygsfunktioner för att definiera fönster i DataFrames.
Stöder Spark Connect
Klassattribut
| Attribute | Beskrivning |
|---|---|
unboundedPreceding |
Gränsvärde som representerar början av en obundna fönsterram. |
unboundedFollowing |
Gränsvärde som representerar slutet på en obundna fönsterram. |
currentRow |
Gränsvärde som representerar den aktuella raden i en fönsterram. |
Methods
| Metod | Beskrivning |
|---|---|
orderBy(*cols) |
Skapar en WindowSpec med den definierade ordningen. |
partitionBy(*cols) |
Skapar en WindowSpec med partitioneringen definierad. |
rangeBetween(start, end) |
Skapar en WindowSpec med de definierade ramgränserna, från start (inkluderande) till end (inkluderande), med intervallbaserade förskjutningar från den aktuella radens ORDER BY värde. |
rowsBetween(start, end) |
Skapar en WindowSpec med de ramgränser som definierats, från start (inkluderande) till end (inkluderande) med hjälp av radbaserade förskjutningar från den aktuella raden. |
Notes
När beställningen inte har definierats används en obundet fönsterram (rowFrame, unboundedPreceding, unboundedFollowing) som standard. När beställning definieras används en växande fönsterram (rangeFrame, unboundedPreceding, currentRow) som standard.
Exempel
Basic-fönster med ordning och radram
from pyspark.sql import Window
# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)
Partitionerat fönster med intervallram
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)
Radnummer inom partition
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()
Löpande summa med radbaserad ram
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()
Löpande summa med intervallbaserad ram
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()