withWatermark

定义此数据帧的事件时间水印。 水印跟踪一个时间点,在此之前,我们假设不会有更多延迟的数据到达。

Syntax

withWatermark(eventTime: str, delayThreshold: str)

参数

参数 类型 说明
eventTime str 包含行的事件时间的列的名称。
delayThreshold str 等待数据到达延迟的最小延迟,相对于以间隔形式处理的最新记录(例如“1 分钟”或“5 小时”)。

退货

DataFrame:水印数据帧。

备注

这是仅适用于结构化流式处理的功能。

Spark 将使用此水印进行多种用途:

  • 若要了解何时可以最终确定给定的时间窗口聚合,因此在使用不允许更新的输出模式时可以发出。
  • 若要最大程度地减少需要保留的正在进行的聚合的状态量。

当前水印是通过查看 MAX(eventTime) 查询中所有分区中看到的减去指定的 delayThreshold用户来计算的。 由于跨分区协调此值的成本,使用的实际水印仅保证至少 delayThreshold 落后于实际事件时间。

示例

from pyspark.sql import Row
from pyspark.sql.functions import timestamp_seconds
df = spark.readStream.format("rate").load().selectExpr(
    "value % 5 AS value", "timestamp")
df.select("value", df.timestamp.alias("time")).withWatermark("time", '10 minutes')
# DataFrame[value: bigint, time: timestamp]