我想在一个ETL工作中使用Spark结构化流,每个事件都是有形式的。
"signature" : "uuid" , "timestamp: " 2020 -01 -01 00 : 00 : 00 ", " payload ": {...}这些事件可能晚到30天,并且可能包括重复的事件。我想根据 "签名 "字段来删除它们。
如果我使用推荐的解决方案。
streamingDf \
.withWatermark("timestamp", "30 days") \
.dropDuplicates("signature", "timestamp")
.write
它是否会跟踪(在内存中保持,存储等)整个事件内容的缓冲区(可能相当大),或者它将只跟踪 "签名 "字段的值?
另外,像上面这样的简单查询会在新数据到达时立即写入新事件,还是会 "阻塞 "30天?