Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Funções utilitárias para definir janela em DataFrames.
Suporta Spark Connect
Atributos de classe
| Attribute | Descrição |
|---|---|
unboundedPreceding |
Valor de fronteira representando o início de uma moldura de janela ilimitada. |
unboundedFollowing |
Valor de fronteira que representa o fim de uma moldura de janela ilimitada. |
currentRow |
Valor de fronteira representando a linha atual numa moldura de janela. |
Methods
| Método | Descrição |
|---|---|
orderBy(*cols) |
Cria um WindowSpec com a ordem definida. |
partitionBy(*cols) |
Cria um WindowSpec com a partição definida. |
rangeBetween(start, end) |
Cria um WindowSpec com os limites do frame definidos, de start (inclusivo) para end (inclusivo), usando deslocamentos baseados em intervalos em relação ao valor da ORDER BY linha atual. |
rowsBetween(start, end) |
Cria um WindowSpec com os limites do frame definidos, de start (inclusivo) para end (inclusivo), usando deslocamentos baseados em linhas da linha atual. |
Notes
Quando a ordenação não está definida, um frame de janela ilimitado (rowFrame, unboundedPreceding, unboundedFollowing) é usado por defeito. Quando a ordem é definida, uma frame de janela crescente (rangeFrame, unboundedPreceding, currentRow) é usada por defeito.
Exemplos
Janela básica com ordenação e frame de linha
from pyspark.sql import Window
# ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
window = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)
Janela particionada com moldura de alcance
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)
Número da linha dentro da partição
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()
Soma corrente com quadro baseado em linhas
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()
Soma corrente com quadro baseado em alcance
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()