PySpark结构化流-水印

时间:2018-07-19 14:13:24

标签: apache-spark pyspark apache-spark-sql spark-streaming

我正在从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

0 个答案:

没有答案