我正在从Spark网站学习使用Python的Spark结构化流。在流数据上实现水印概念时,我没有得到预期的输出。 在批处理2中,我不应该获得第2行和第7行,而应该像我使用更新模式那样仅获得第7行。有人可以弄清楚为什么会这样吗?
这是代码:-
# Start Streaming
from pyspark.sql.functions import window
streamingData = spark\
.readStream\
.schema(fileDF.schema)\
.option('maxFilesPerTrigger', 1)\
.option('header', True)\
.format('com.databricks.spark.csv')\
.load('/PySpark/Files/Source/Streaming/watermark*.csv')
windowedCounts = streamingData \
.withWatermark("timestamp", "10 minutes") \
.groupBy(
window(streamingData.timestamp, "10 minutes", "5 minutes"),
streamingData.name) \
.count()
# Write Stream
windowedCounts\
.writeStream\
.format('memory')\
.queryName('watermark_stream')\
.outputMode('update')\
.start()
运行1:
输入:
时间戳,名称
2018-07-19 13:27:00,狗
2018-07-19 13:28:00猫头鹰
输出:
0(2018-07-19 13:20:00,2018-07-19 13:30:00)狗1
1(2018-07-19 13:20:00,2018-07-19 13:30:00)猫头鹰1
2(2018-07-19 13:25:00,2018-07-19 13:35:00)狗1
3(2018-07-19 13:25:00,2018-07-19 13:35:00)猫头鹰1
运行2:
输入:
2018-07-19 13:34:00,狗
2018-07-19 13:29:00,猫
输出:
0(2018-07-19 13:20:00,2018-07-19 13:30:00)狗1
1(2018-07-19 13:20:00,2018-07-19 13:30:00)猫头鹰1
2(2018-07-19 13:25:00,2018-07-19 13:35:00)狗1
3(2018-07-19 13:25:00,2018-07-19 13:35:00)猫头鹰1
4(2018-07-19 13:30:00,2018-07-19 13:40:00)狗1
5(2018-07-19 13:25:00,2018-07-19 13:35:00)猫1
6(2018-07-19 13:20:00,2018-07-19 13:30:00)猫1
7(2018-07-19 13:25:00,2018-07-19 13:35:00)狗2