intervaloEntre (Janela)
Cria um WindowSpec com os limites da moldura definidos, de start (inclusive) a end (inclusive).
Tanto start quanto end são relativos à linha atual. Por exemplo, 0 significa "linha atual", -1 significa uma linha anterior à atual e 5 significa cinco linhas posteriores à atual.
Um limite baseado em intervalo é baseado no valor real da(s) expressão(ões) ORDER BY. Um deslocamento altera o valor da expressão ORDER BY — por exemplo, se o valor atual do ORDER BY for 10 e o deslocamento do limite inferior for -3, o limite inferior resultante será 7. Por essa razão, os quadros baseados em intervalo exigem exatamente uma expressão ORDER BY com um tipo de dados numérico, a menos que o deslocamento seja ilimitado.
Sintaxe
Window.rangeBetween(start, end)
Parâmetros
Parâmetro | Tipo | Descrição |
|---|---|---|
| int | O limite começa, inclusivo. O quadro é ilimitado se for |
| int | Fim do limite, inclusive. O quadro é ilimitado se for |
Devoluções
WindowSpec
Notas
Use Window.unboundedPreceding, Window.unboundedFollowing e Window.currentRow para especificar valores de limite especiais em vez de usar valores inteiros diretamente.
Exemplos
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"])
# Calculate the sum of id where the id value falls within [current id, current id + 1]
# in each category partition.
window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", sf.sum("id").over(window)).sort("id", "category").show()
# +---+--------+---+
# | id|category|sum|
# +---+--------+---+
# | 1| a| 4|
# | 1| a| 4|
# | 1| b| 3|
# | 2| a| 2|
# | 2| b| 5|
# | 3| b| 3|
# +---+--------+---+