我有一个 Spark 结构化流作业,它从 cassandra 和 deltalake 读取映射表并与流 df 连接。我想了解这里的确切机制。 Spark 是否会在微批次的每个周期都会访问这些数据源(cassandra 和 deltalake)?如果是这种情况,我在 Spark Web ui 中看到这些表只读取一次。 请帮助我理解这一点。 预先感谢
“Spark 是否会针对每个微批次周期命中这些数据源(cassandra 和 deltalake)?”
根据 O'Reilly 的关于静态流连接的书“学习 Spark,第 2 版”,提到静态 DataFrame 在每个微批次中都会被读取。
更准确地说,我发现书中的以下部分非常有帮助:
流静态连接是无状态操作,因此不需要任何类型的水印
静态DataFrame在与每个微批次的流数据连接时会重复读取,因此可以缓存静态DataFrame以加快读取速度。
如果定义静态DataFrame的数据源中的底层数据发生变化,流式查询是否能看到这些变化取决于数据源的具体行为。例如,如果在文件上定义了静态 DataFrame,则在重新启动流查询之前,不会拾取对这些文件的更改(例如附加)。
当应用“静态流”连接时,假设静态部分根本没有变化或只是缓慢变化。如果您计划连接两个快速变化的数据源,则需要切换到“流-流”连接。
如果您想定期刷新“静态”数据,您可以在如何定期刷新静态数据帧中查看我的答案。