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