將列分成一個或多個指定時間點欄位的時間視窗。 視窗起始時間包含,但視窗結束時間排他,例如 12:05 會在視窗 [12:05,12:10) 中,但不在 [12:00,12:05)。 Windows 可以支援微秒級的精確度。 Windows 幾個月內就不支援了。
時間欄位必須為 pyspark.sql.types.TimestampType。
持續時間以字串形式提供,例如「1秒」、「1天12小時」、「2分鐘」。 有效的區間串包括「週」、「日」、「小時」、「分鐘」、「秒」、「毫秒」、「微秒」。
如果沒有提供, slideDuration 窗戶就會變成翻滾窗戶。
startTime 是相對於 1970-01-01 00:00:00 UTC 的偏移量,用來開始視窗間隔。 例如,為了讓每小時的翻滾視窗從整點過後15分鐘開始,例如12:15-13:15、13:15-14:15......提供 startTime 為 15 minutes。
輸出欄位預設為名為 'window' 的結構體,巢狀欄位為 'start' 和 'end',其中 'start' 和 'end' 屬於 pyspark.sql.types.TimestampType。
關於對應的 Databricks SQL 函式,請參見 window 分組表達式。
語法
from pyspark.databricks.sql import functions as dbf
dbf.window(timeColumn=<timeColumn>, windowDuration=<windowDuration>, slideDuration=<slideDuration>, startTime=<startTime>)
參數
| 參數 | 類型 | Description |
|---|---|---|
timeColumn |
pyspark.sql.Column 或 str |
欄位或表達式作為時間窗口的時間戳。 時間欄位必須是 TimestampType 或 TimestampNTZType。 |
windowDuration |
literal string |
一個指定視窗寬度的字串,例如 10 minutes, 1 second。 檢查 org.apache.spark.unsafe.types.CalendarInterval 有效期限識別碼。 請注意,時間長度是固定的,且不會隨時間變化,並未依照曆法改變。 例如,永遠 1 day 代表 86,400,000 毫秒,而不是日曆日。 |
slideDuration |
literal string, optional |
每 slideDuration。 必須小於或等 windowDuration於 。 檢查 org.apache.spark.unsafe.types.CalendarInterval 有效期限識別碼。 這個持續時間同樣是絕對的,且不會因曆法而異。 |
startTime |
literal string, optional |
相對於 1970-01-01 00:00:00 UTC 的偏移量,開始視窗間隔。 例如,為了讓每小時的翻滾視窗從整點過後15分鐘開始,例如12:15-13:15、13:15-14:15......提供 startTime 為 15 minutes。 |
退貨
pyspark.sql.Column: 欄位用於計算結果。
範例
import datetime
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([(datetime.datetime(2016, 3, 11, 9, 0, 7), 1)], ['dt', 'v'])
df2 = df.groupBy(dbf.window('dt', '5 seconds')).agg(dbf.sum('v'))
df2.show(truncate=False)
df2.printSchema()