spark结构化流作业如何处理流-静态DataFrame连接?
Posted
技术标签:
【中文标题】spark结构化流作业如何处理流-静态DataFrame连接?【英文标题】:How does spark structured streaming job handle stream - static DataFrame join? 【发布时间】:2020-12-02 12:50:16 【问题描述】:我有一个 spark 结构化流式作业,它从 cassandra 和 deltalake 读取映射表并与流式 df 连接。我想了解这里的确切机制。 Spark 是否会在每个微批处理周期中命中这些数据源(cassandra 和 deltalake)?如果是这种情况,我在 spark web ui 中看到这些表只读取一次。 请帮助我理解这一点。 提前致谢
【问题讨论】:
显示代码,显示代码 我可以对语句的流程做一个非常简要的概述 1) 从 kafka 主题中读取流数据 2) 读取 cassandra 表 3) 加入上述 2 个 dfs 4) 写入另一个主题 【参考方案1】:“对于每个微批处理周期,Spark 是否会命中这些数据源(cassandra 和 deltalake)?”
根据 O'Reilly 关于静态流连接的“Learning Spark, 2nd edition”一书,提到在每个微批次中都会读取静态 DataFrame。
更准确地说,我发现书中的以下部分很有帮助:
流静态连接是无状态操作,因此不需要任何类型的水印
静态DataFrame在加入每个微批次的流式数据的同时重复读取,因此您可以缓存静态DataFrame以加快读取速度。
如果定义静态 DataFrame 的数据源中的基础数据发生变化,流式查询是否能看到这些变化取决于数据源的特定行为。例如,如果静态 DataFrame 是在文件上定义的,则在重新启动流式查询之前不会获取对这些文件的更改(例如追加)。
当应用“静态流”连接时,假定静态部分根本没有变化或只是缓慢变化。如果您计划连接两个快速变化的数据源,则需要切换到“流-流”连接。
【讨论】:
谢谢迈克。这有帮助。是的,我能够确认这种行为。尝试缓存静态数据帧并提高性能。以上是关于spark结构化流作业如何处理流-静态DataFrame连接?的主要内容,如果未能解决你的问题,请参考以下文章