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连接?的主要内容,如果未能解决你的问题,请参考以下文章

SDN第三次作业

SDN第三次作业

显示 Spark 结构化流作业消耗的事件数

如何处理活动流中已删除的照片

流分析 - 如何处理参考输入中的 json

在 Spark 结构化流中,我如何将完整的聚合输出到外部源,如 REST 服务