在公共视图上具有不同触发间隔中继的 Spark Structured Streaming 多个查询
Spark Structured Streaming multiple queries with different trigger interval relay on common view
假设我们有一个结构化流式应用程序,其中我们有多个具有不同触发间隔并依赖于一些公共视图的接收器。 Spark 将如何处理公共视图:自动缓存还是多次处理?
以下为伪代码
val ds = spark.readStream.format("kafka").load()
ds.select(udf1(a) as a, udf2(b) as b, udf3(c) as c)
.withWatermark(c, "1 minute")
.createTempView("t0") // how will this line be handled?
spark.sql("select max(a) from t0 group by window(c, '1 minute')")
.writeStream.format("kafka")
.trigger(ProcessingTime("1 minute")) //one minute
.start()
spark.sql("select max(b) from t0 group by window(c, '1 minute')")
.writeStream.format("kafka")
.trigger(ProcessingTime("5 minutes"))
.start()
spark.streams.awaitAnyTermination()
更新
水印会独立处理吗?我的猜测是水印是
在每个 writeStream
.
中单独维护
在你的例子中,这两个查询独立地从Kafka读取,数据将被处理两次。当你调用 Dataset.createTempView
时,Spark 只记住名称和数据集的逻辑计划。下次当您使用临时视图时,Spark 只需插入逻辑计划,其行为就像您在数据集上调用方法一样。 Spark 中临时视图的概念与数据库临时视图非常相似
假设我们有一个结构化流式应用程序,其中我们有多个具有不同触发间隔并依赖于一些公共视图的接收器。 Spark 将如何处理公共视图:自动缓存还是多次处理?
以下为伪代码
val ds = spark.readStream.format("kafka").load()
ds.select(udf1(a) as a, udf2(b) as b, udf3(c) as c)
.withWatermark(c, "1 minute")
.createTempView("t0") // how will this line be handled?
spark.sql("select max(a) from t0 group by window(c, '1 minute')")
.writeStream.format("kafka")
.trigger(ProcessingTime("1 minute")) //one minute
.start()
spark.sql("select max(b) from t0 group by window(c, '1 minute')")
.writeStream.format("kafka")
.trigger(ProcessingTime("5 minutes"))
.start()
spark.streams.awaitAnyTermination()
更新
水印会独立处理吗?我的猜测是水印是
在每个 writeStream
.
在你的例子中,这两个查询独立地从Kafka读取,数据将被处理两次。当你调用 Dataset.createTempView
时,Spark 只记住名称和数据集的逻辑计划。下次当您使用临时视图时,Spark 只需插入逻辑计划,其行为就像您在数据集上调用方法一样。 Spark 中临时视图的概念与数据库临时视图非常相似