1.Overview
结构化流是一种基于Spark SQL引擎的可扩展且容错的流处理引擎。 您可以像表达静态数据的批处理计算一样表达流式计算。
Spark SQL引擎将负责逐步和连续地运行它,并在流数据继续到达时更新最终结果。 您可以使用Scala,Java,Python或R中的数据集/数据框架API来表示流聚合,事件时间窗口,流到批处理连接等。
计算在同一优化的Spark SQL引擎上执行。 最后,系统通过检查点和预写日志确保端到端的一次性容错保证。
简而言之,Structured Streaming提供快速,可扩展,容错,端到端的精确一次流处理,而无需用户推理流式传输。
在内部,默认情况下,结构化流式查询使用微批处理引擎进行处理,该引擎将数据流作为一系列小批量作业处理,从而实现低至100毫秒的端到端延迟和完全一次的容错保证。
但是,自Spark 2.3以来,我们引入了一种称为连续处理的新型低延迟处理模式,它可以实现低至1毫秒的端到端延迟,并且具有至少一次保证。 无需更改查询中的数据集/数据框操作,您就可以根据应用程序要求选择模式。
2.Quick Example
假设希望维护从侦听TCP套接字的数据服务器接收的文本数据的运行字数开始。 让我们看看如何使用Structured Streaming。
import org.apache.spark.sql.functions._
import org.apache.spark.sql.sparkSession