rangeBetween (Janela)

Cria um WindowSpec com os limites do quadro definidos, de start (inclusivo) para end (inclusivo).

Ambos start e end são relativos em relação à linha atual. Por exemplo, 0 significa "linha atual", -1 significa um antes da linha atual, e 5 significa cinco depois da linha atual.

Uma fronteira baseada em intervalo baseia-se no valor real da ORDER BY (s) expressão(ões). Um deslocamento altera o valor da ORDER BY expressão — por exemplo, se o valor atual ORDER BY for 10 e o deslocamento inferior for -3, o limite inferior resultante é 7. Por causa disso, as tramas baseadas em intervalo requerem exatamente uma ORDER BY expressão com um tipo de dado numérico, a menos que o deslocamento seja ilimitado.

Sintaxe

Window.rangeBetween(start, end)

Parâmetros

Parâmetro Tipo Descrição
start int Início de limites, inclusivo. O referencial é ilimitado se isto for Window.unboundedPreceding, ou qualquer valor menor ou igual a max(-sys.maxsize, -9223372036854775808).
end int Limite final, inclusivo. O referencial é ilimitado se isto for Window.unboundedFollowing, ou qualquer valor maior ou igual a min(sys.maxsize, 9223372036854775807).

Devoluções

WindowSpec

Notes

Use Window.unboundedPreceding, Window.unboundedFollowing, e Window.currentRow para especificar valores de fronteira 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|
# +---+--------+---+