返回删除了重复行的新 DataFrame,可以选择只考虑水印中的某些列。
Syntax
dropDuplicatesWithinWatermark(subset: Optional[List[str]] = None)
参数
| 参数 | 类型 | 说明 |
|---|---|---|
subset |
列名称列表,可选 | 用于重复比较的列列表(默认为“所有列”)。 |
退货
DataFrame:不带重复项的数据帧。
备注
这仅适用于流式处理数据帧,并且必须通过 withWatermark设置输入数据帧的水印。
对于流式处理数据帧,这会将触发器中的所有数据保留为中间状态以删除重复的行。 状态将保留为保证语义,“只要最早事件的时间距离和最新事件的时间距离小于水印的延迟阈值,就会删除重复事件。建议用户设置水印的延迟阈值超过重复事件之间的最大时间戳差异。
注意:将删除早于水印的数据太晚。
支持 Spark Connect。
示例
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]
df.dropDuplicatesWithinWatermark()
df.dropDuplicatesWithinWatermark(['value'])