如何在Spark结构化流中指定批处理间隔?

时间:2019-09-02 17:02:37

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

我正在通过Spark结构化流传输并遇到问题。

在StreamingContext的DStreams中,我们可以如下定义一个批处理间隔:

from pyspark.streaming import StreamingContext
ssc = StreamingContext(sc, 5) # 5 second batch interval

如何在结构化流媒体中做到这一点?

我的流媒体类似:

sparkStreaming = SparkSession \
.builder \
.appName("StreamExample1") \
.getOrCreate()

stream_df = sparkStreaming.readStream.schema("col0 STRING, col1 INTEGER").option("maxFilesPerTrigger", 1).\
csv("C:/sparkStream")

sql1 = stream_df.groupBy("col0").sum("col1")
query = sql1.writeStream.queryName("stream1").outputMode("complete").format("memory").start() 

此代码按预期工作,但是,如何/在此处定义批处理间隔?

我是结构化流媒体的新手,请指导我。

1 个答案:

答案 0 :(得分:2)

tl; dr 使用trigger(...)(在DataStreamWriter上,即writeStream之后)


这是https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html的绝佳来源。

有很多选项,如果您不设置批次间隔,Spark将在处理完最后一批后立即查找数据。触发是转到这里。

从手册:

  

流式查询的触发设置定义了   流数据处理,查询是否要执行为   具有固定批次间隔或连续的微批次查询   处理查询。

一些例子:

默认触发器(尽快运行微型批处理)

df.writeStream \   .format(“控制台”)\   .start()

ProcessingTime触发器,间隔为两秒

df.writeStream \   .format(“控制台”)\   .trigger(processingTime ='2秒')\   .start()

一次触发

df.writeStream \   .format(“控制台”)\   .trigger(一次=真实)\   .start()

以一秒钟的检查点间隔连续触发

df.writeStream   .format(“控制台”)   .trigger(连续='1秒')   .start()