Spark结构化流多个WriteStream到同一个接收器

时间:2018-06-11 06:57:26

标签: scala apache-spark slick-3.0 spark-structured-streaming

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

1 个答案:

答案 0 :(得分:7)

如果您想要并行运行两个流,则必须使用

sparkSession.streams.awaitAnyTermination()

而不是

deleteSink.awaitTermination()
UpsertSink.awaitTermination()

在你的情况下,除非删除deleteSink或抛出异常,否则UpsertSink永远不会启动,正如scaladoc中所述

  

通过this或异常等待query.stop()查询终止。   如果查询以异常终止,则抛出异常。   如果查询已终止,则对此方法的所有后续调用都将返回   立即(如果查询被stop()终止),或抛出异常   立即(如果查询已异常终止)。