WindowSpec (包括) からstart (包括) まで、定義されたフレーム境界を持つendを作成します。
startとendの両方が、現在の行からの相対値です。 たとえば、 0 は "現在の行" を意味し、 -1 は現在の行の前に 1 つ、 5 は現在の行の後に 5 つを意味します。
範囲ベースの境界は、 ORDER BY 式の実際の値に基づいています。 オフセットによって ORDER BY 式の値が変更されます。たとえば、現在の ORDER BY 値が 10 され、下限オフセットが -3されている場合、結果の下限は 7。 このため、範囲ベースのフレームでは、オフセットが無制限でない限り、数値データ型の ORDER BY 式が 1 つだけ必要です。
構文
Window.rangeBetween(start, end)
パラメーター
| パラメーター | タイプ | 説明 |
|---|---|---|
start |
int | 境界の開始 (両端を含む)。 フレームが Window.unboundedPrecedingされている場合、または max(-sys.maxsize, -9223372036854775808)以下の値の場合、フレームは無制限になります。 |
end |
int | 境界の端 (両端を含む)。 フレームが Window.unboundedFollowingされている場合、または min(sys.maxsize, 9223372036854775807)以上の値の場合、フレームは無制限になります。 |
返品
WindowSpec
メモ
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|
# +---+--------+---+