Spark Structured Streaming - 无需重新读取数据的多个聚合

Spark Structured Streaming - multiple aggregations without re-reading data

我正在研究将 Apache Spark 用于应用程序。我对使用临时视图和完整 SQL 查询(为了简单和低延迟)的结构化流模式特别感兴趣。

应用程序需要对单个输入数据流进行 运行 多次(数十次,可能数百次)查询。有没有办法避免让 Spark 重新读取每个查询的输入?

同一个 Spark Structured Streaming 应用程序中的多个流查询将 运行 并发且独立,因为它们在读取相同源时取得不同的进展。因此,caching/persisting将不可行(实际上也不可能)。

除非您对流式查询使用以下 foreachBatch 模式,否则没有缓存输入源的标准方法。

streamingDF.writeStream.foreachBatch { (batchDF: DataFrame, batchId: Long) =>
  batchDF.persist()
  batchDF.write.format(...).save(...)  // location 1
  batchDF.write.format(...).save(...)  // location 2
  batchDF.unpersist()
}

using foreach and foreachbatch

上的结构化流编程指南中提供了更多详细信息