我正在通过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()
此代码按预期工作,但是,如何/在此处定义批处理间隔?
我是结构化流媒体的新手,请指导我。
答案 0 :(得分:2)
tl; dr 使用trigger(...)
(在DataStreamWriter
上,即writeStream
之后)
这是https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html的绝佳来源。
有很多选项,如果您不设置批次间隔,Spark将在处理完最后一批后立即查找数据。触发是转到这里。
从手册:
流式查询的触发设置定义了 流数据处理,查询是否要执行为 具有固定批次间隔或连续的微批次查询 处理查询。
一些例子:
df.writeStream \ .format(“控制台”)\ .start()
df.writeStream \ .format(“控制台”)\ .trigger(processingTime ='2秒')\ .start()
df.writeStream \ .format(“控制台”)\ .trigger(一次=真实)\ .start()
df.writeStream .format(“控制台”) .trigger(连续='1秒') .start()