rangeBetween(Window)

WindowSpec(포함)에서 start (포함)로 정의된 프레임 경계를 end 사용하여 만듭니다.

둘 다 start 현재 end 행에서 상대적입니다. 예를 들어 0 "현재 행" -1 은 현재 행 앞에 1을 의미하고 5 현재 행 뒤의 5를 의미합니다.

범위 기반 경계는 식의 ORDER BY 실제 값을 기반으로 합니다. 오프셋은 식의 ORDER BY 값을 변경합니다. 예를 들어 현재 ORDER BY 값이 10 하한 오프셋이고 하한 오프셋이 -3면 결과 하한이 됩니다 7. 이 때문에 오프셋이 바인딩되지 않는 한 범위 기반 프레임에는 숫자 데이터 형식이 있는 식이 정확히 하나 ORDER BY 필요합니다.

문법

Window.rangeBetween(start, end)

매개 변수

매개 변수 유형 설명
start int 경계 시작(포함)입니다. 프레임이 바인딩되지 않은 경우 또는 값이 Window.unboundedPreceding1보다 작거나 같은 경우 max(-sys.maxsize, -9223372036854775808)
end int 경계 끝(포함)입니다. 프레임이 바인딩되지 않은 경우 또는 값이 Window.unboundedFollowing1보다 크거나 같은 경우 min(sys.maxsize, 9223372036854775807)

Returns

WindowSpec

Notes

Window.unboundedPreceding사용하고 Window.unboundedFollowing정수 Window.currentRow 값을 직접 사용하는 대신 특수 경계 값을 지정합니다.

예제

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|
# +---+--------+---+