结构化数据流中的JOIN操作
本文介绍了结构化数据流中支持的JOIN操作的类型,包括inner、outer和semi连接。结构化数据流可以支持streamingDataFrame/DataSet与静态DataFrame/DataSet进行JOIN操作,也支持两个streamingDataFrame/DataSet进行JOIN操作,流连接的结果以增量方式生成,与流聚合结果类似。

流数据集的不同连接类型
Spark2.3添加了支持流连接的功能,可以连接两个流数据集/数据帧。在两个数据流之间生成连接结果的挑战在于,在任何时间点,数据集的视图对于连接的两侧都是不完整的,这使得查找输入之间的匹配变得更加困难。从一个输入流接收到的任何行都可以与将来从另一个输入流接收到的任何行相匹配。因此,对于这两个输入流,我们使用流状态来缓存过去的输入,使得每个未来的输入都能与过去的输入匹配,并相应地生成连接的结果。
基于水印的连接操作
基于水印的INNERJOIN操作支持任何类型的列上的内部连接以及任何类型的连接条件。然而,随着流的运行,流状态的大小将无限期的增长,因为所有过去的输入都必须保存。为了避免无限的状态,必须定义额外的连接条件,以便过去的旧输入无法与将来的输入匹配,因此在连接中必须定义水印、事件时间范围条件等,以删除旧状态。
基于水印的OUTERJOIN和SEMIJOIN操作也必须指定水印和事件时间约束条件,以生成正确的连接结果。
总之,流数据集可以与静态数据集进行JOIN操作,也可以连接两个流数据集/数据帧。JOIN操作支持不同的连接类型,例如inner、outer和semi连接。除了使用连接条件外,还需要指定水印和事件时间范围条件以删除旧状态。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6340.html
