當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python pyspark Window.rangeBetween用法及代碼示例

本文簡要介紹 pyspark.sql.Window.rangeBetween 的用法。

用法:

static Window.rangeBetween(start, end)

創建一個WindowSpec,定義了從start(含)到end(含)的幀邊界。

startend 都是相對於當前行的。例如“0”表示“current row”,“-1”表示當前行前一關,“5”表示當前行後五關。

我們建議用戶使用 Window.unboundedPrecedingWindow.unboundedFollowingWindow.currentRow 來指定特殊邊界值,而不是直接使用整數值。

基於範圍的邊界基於 ORDER BY 表達式的實際值。偏移量用於更改 ORDER BY 表達式的值,例如,如果當前 ORDER BY 表達式的值為 10 並且下限偏移量為 -3,則當前行的結果下限將為 10 - 3 = 7. 然而,這對 ORDER BY 表達式施加了許多限製:隻能有一個表達式,並且該表達式必須具有數字數據類型。當偏移量不受限製時可能會出現異常,因為不需要修改值,在這種情況下,允許使用多個非數字 ORDER BY 表達式。

2.1.0 版中的新函數。

參數

startint

邊界開始,包括在內。如果這是 Window.unboundedPreceding 或小於或等於 max(-sys.maxsize, -9223372036854775808) 的任何值,則該幀是無界的。

endint

邊界結束,包括在內。如果這是 Window.unboundedFollowing 或任何大於或等於 min(sys.maxsize, 9223372036854775807) 的值,則該幀是無界的。

例子

>>> from pyspark.sql import Window
>>> from pyspark.sql import functions as func
>>> from pyspark.sql import SQLContext
>>> sc = SparkContext.getOrCreate()
>>> sqlContext = SQLContext(sc)
>>> tup = [(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")]
>>> df = sqlContext.createDataFrame(tup, ["id", "category"])
>>> window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
>>> df.withColumn("sum", func.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|
+---+--------+---+

相關用法


注:本文由純淨天空篩選整理自spark.apache.org大神的英文原創作品 pyspark.sql.Window.rangeBetween。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。