Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hilfsfunktionen zum Definieren des Fensters in DataFrames.
Unterstützt Spark Connect
Klassenattribute
| Merkmal | Beschreibung |
|---|---|
unboundedPreceding |
Grenzwert, der den Anfang eines ungebundenen Fensterrahmens darstellt. |
unboundedFollowing |
Grenzwert, der das Ende eines ungebundenen Fensterrahmens darstellt. |
currentRow |
Grenzwert, der die aktuelle Zeile in einem Fensterrahmen darstellt. |
Methodik
| Methode | Beschreibung |
|---|---|
orderBy(*cols) |
Erstellt eine WindowSpec mit der definierten Sortierung. |
partitionBy(*cols) |
Erstellt eine WindowSpec mit der definierten Partitionierung. |
rangeBetween(start, end) |
Erstellt eine WindowSpec mit den definierten Rahmengrenzen von start (einschließlich) bis end (einschließlich) mithilfe von bereichsbasierten Offsets aus dem Wert der aktuellen Zeile ORDER BY . |
rowsBetween(start, end) |
Erstellt eine WindowSpec mit den definierten Rahmengrenzen von start (einschließlich) bis end (einschließlich) mithilfe von zeilenbasierten Offsets aus der aktuellen Zeile. |
Hinweise
Wenn die Sortierung nicht definiert ist, wird standardmäßig ein ungebundener Fensterrahmen (rowFrame, unboundedPreceding, unboundedFollowing) verwendet. Wenn die Sortierung definiert ist, wird standardmäßig ein wachsender Fensterrahmen (rangeFrame, unboundedPreceding, currentRow) verwendet.
Beispiele
Einfaches Fenster mit Sortierung und Zeilenrahmen
from pyspark.sql import Window
# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)
Partitioniertes Fenster mit Bereichsrahmen
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)
Zeilennummer innerhalb der 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()
Ausführen der Summe mit zeilenbasiertem Frame
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()
Ausführen der Summe mit bereichsbasiertem Frame
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()