Spark Structured Streaming 2.2.1中没有按顺序发生两个Writestream
到同一个数据库接收器。请建议如何按顺序执行它们。
val deleteSink = ds1.writestream
.outputMode("update")
.foreach(mydbsink)
.start()
val UpsertSink = ds2.writestream
.outputMode("update")
.foreach(mydbsink)
.start()
deleteSink.awaitTermination()
UpsertSink.awaitTermination()
使用上述代码,deleteSink
后执行UpsertSink
。
答案 0 :(得分:7)
如果您想要并行运行两个流,则必须使用
sparkSession.streams.awaitAnyTermination()
而不是
deleteSink.awaitTermination()
UpsertSink.awaitTermination()
在你的情况下,除非删除deleteSink或抛出异常,否则UpsertSink永远不会启动,正如scaladoc中所述
通过
this
或异常等待query.stop()
查询终止。 如果查询以异常终止,则抛出异常。 如果查询已终止,则对此方法的所有后续调用都将返回 立即(如果查询被stop()
终止),或抛出异常 立即(如果查询已异常终止)。