通过


窗口

根据指定列的时间戳,将行划分到一个或多个时间窗口中。 窗口开始是非独占的,但窗口结束是独占的,例如 12:05 将在窗口中,但不在窗口中[12:05,12:10)[12:00,12:05)。 Windows 可以支持微秒精度。 不支持按月顺序排列的 Windows。

时间列必须为 pyspark.sql.types.TimestampType.

持续时间以字符串的形式提供,例如“1 秒”、“1 天 12 小时”、“2 分钟”。 有效的间隔字符串为“week”、“day”、“hour”、“minute”、“second”、“毫秒”、“microsecond”。 如果未提供, slideDuration 窗口将翻转窗口。

startTime 是相对于 1970-01-01 00:00:00 UTC 的偏移量,用于启动窗口间隔。 例如,若要让每小时翻转窗口在过去一小时内开始 15 分钟,例如 12:15-13:15、13:15-14:15...提供 startTime15 minutes.

默认情况下,输出列将是一个名为“window”的结构,其中嵌套列为“start”和“end”,其中“start”和“end”为 < a0/>。

有关相应的 Databricks SQL 函数,请参阅 window 分组表达式

Syntax

from pyspark.databricks.sql import functions as dbf

dbf.window(timeColumn=<timeColumn>, windowDuration=<windowDuration>, slideDuration=<slideDuration>, startTime=<startTime>)

参数

参数 类型 Description
timeColumn pyspark.sql.Columnstr 要用作按时间窗口的时间戳的列或表达式。 时间列必须是 TimestampType 或 TimestampNTZType。
windowDuration literal string 指定窗口宽度的字符串,例如10 minutes1 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...提供 startTime15 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()