Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Fonctions utilitaires pour la définition d’une fenêtre dans des DataFrames.
Prend en charge Spark Connect
Attributs de classe
| Caractéristique | Description |
|---|---|
unboundedPreceding |
Valeur de limite représentant le début d’un cadre de fenêtre non lié. |
unboundedFollowing |
Valeur de limite représentant la fin d’un cadre de fenêtre non lié. |
currentRow |
Valeur de limite représentant la ligne active dans un cadre de fenêtre. |
Méthodes
| Méthode | Description |
|---|---|
orderBy(*cols) |
Crée une WindowSpec avec l’ordre défini. |
partitionBy(*cols) |
Crée une WindowSpec avec le partitionnement défini. |
rangeBetween(start, end) |
Crée un WindowSpec avec les limites de frame définies, de start (inclusive) à (inclusive), à end l’aide de décalages basés sur des plages de la valeur de ORDER BY la ligne actuelle. |
rowsBetween(start, end) |
Crée un WindowSpec avec les limites de trame définies, de (inclusive) à (inclusive), à end l’aide de start décalages basés sur les lignes à partir de la ligne actuelle. |
Remarques
Lorsque l’ordre n’est pas défini, un cadre de fenêtre non lié (rowFrame, unboundedPreceding, unboundedFollowing) est utilisé par défaut. Lorsque l’ordre est défini, une trame de fenêtre croissante (rangeFrame, unboundedPreceding, currentRow) est utilisée par défaut.
Exemples
Fenêtre de base avec ordre et cadre de ligne
from pyspark.sql import Window
# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)
Fenêtre partitionnée avec cadre de plage
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)
Numéro de ligne dans la 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()
Somme en cours d’exécution avec une trame basée sur des lignes
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()
Somme en cours d’exécution avec une trame basée sur une plage
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()