我使用Spark 2.4.3。
迟到的数据未被拒绝。
我正在使用结构化流从文件夹中读取文件。我希望可以将延迟到达的数据排除在外,但仍会计算在内。
case class InputRow(...)
val df = spark.readStream
.format("csv")
.option("delimiter", ",")
.schema(schema)
.csv("/somefolder/")
...
df.as[InputRow]
.withWatermark("eventtime", "5 seconds")
.groupBy($"eventid")
.count()
.writeStream.format("console")
.trigger(Trigger.ProcessingTime("3 seconds"))
.option("truncate", false)
.outputMode("update")
.start
.awaitTermination()
我第一次将文件放在一行中,例如: 2019-08-04 10:10:00,1,3328,c1,10,1000
这里的事件ID是3328。输出为:
-------------------------------------------
Batch: 0
-------------------------------------------
+-------+-----+
|eventid|count|
+-------+-----+
|3328 |1 |
+-------+-----+
-------------------------------------------
Batch: 1
-------------------------------------------
+-------+-----+
|eventid|count|
+-------+-----+
+-------+-----+
然后,我将另一个文件放在一行中,例如: 2019-08-02 10:10:00,1,3328,c1,10,1000 eventid相同,但是eventtime更改为8/2,这显然超出水印范围(到目前为止,最长时间为5秒),但是输出为:
-------------------------------------------
Batch: 2
-------------------------------------------
+-------+-----+
|eventid|count|
+-------+-----+
|3328 |2 |
+-------+-----+
那么问题:
谢谢!