spark 结构化流作业如何处理流 - 静态 DataFrame 连接?

问题描述 投票:0回答:1

我有一个 Spark 结构化流作业,它从 cassandra 和 deltalake 读取映射表并与流 df 连接。我想了解这里的确切机制。 Spark 是否会在微批次的每个周期都会访问这些数据源(cassandra 和 deltalake)?如果是这种情况,我在 Spark Web ui 中看到这些表只读取一次。 请帮助我理解这一点。 预先感谢

apache-spark pyspark spark-streaming spark-structured-streaming
1个回答
3
投票

“Spark 是否会针对每个微批次周期命中这些数据源(cassandra 和 deltalake)?”

根据 O'Reilly 的关于静态流连接的书“学习 Spark,第 2 版”,提到静态 DataFrame 在每个微批次中都会被读取。

更准确地说,我发现书中的以下部分非常有帮助:

  • 流静态连接是无状态操作,因此不需要任何类型的水印

  • 静态DataFrame在与每个微批次的流数据连接时会重复读取,因此可以缓存静态DataFrame以加快读取速度。

  • 如果定义静态DataFrame的数据源中的底层数据发生变化,流式查询是否能看到这些变化取决于数据源的具体行为。例如,如果在文件上定义了静态 DataFrame,则在重新启动流查询之前,不会拾取对这些文件的更改(例如附加)。

当应用“静态流”连接时,假设静态部分根本没有变化或只是缓慢变化。如果您计划连接两个快速变化的数据源,则需要切换到“流-流”连接。

如果您想定期刷新“静态”数据,您可以在如何定期刷新静态数据帧中查看我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.