在本篇artipostle中,我们将介绍Spark Structured Streaming中可用的不同连接以及如何使用Scala实现它们。

目的

在本文中,我们将介绍Spark Structured Streaming中可用的不同连接。在流式作业中,您可能拥有多个静态和流式数据源。您可能必须加入它们以实现各种功能。我们将看到Spark Structured Streaming如何处理静态和流式数据集的各种类型的连接。

Spark结构化流媒体连接

概观

下表概述了左/右的不同类型的流以及结构化流中支持/不支持的内容。

内部联接

从上表可以看出,无论是静态数据集还是流式数据集,都支持内连接。流和静态数据集的内部连接不必是有状态的,因为流中的记录集将与静态记录集匹配。具有静态和流连接的内部联接不是有状态的,而当您内部连接两个流数据集时,可选地,您可以为其添加水印并添加时间约束。我们将在后面的部分讨论两个流数据集的内部连接。

完全外部加入

仅在连接两个静态数据集时才支持完全外部联接。从下表可以看出,如果涉及流式数据集,则不支持完全外部连接。在任何流数据集中不支持完全外连接的原因之一是由于左和右都不必等待彼此的匹配数据到达。在流式传输中,由于迟到的数据,给定的记录可能与同一窗口中的相应记录不匹配,并且当您使用完全外部连接时,这可能导致非常不一致的输出。

静态数据和静态连接

在流式作业中使用静态数据集时,数据仅在作业开始时加载一次。当您连接两个静态数据集时,支持所有类型的连接。我们不会在本文中详细介绍两种类型的静态连接数据集。

流数据和静态lian'jie

在上述配置中使用流式数据集和静态数据集时,仅支持内部联接和左外部联接。不支持右外连接和完全外连接。

在我看来,不需要右外连接,因为只有静态数据将作为微批量的输出返回,这可能没什么用处。出于同样的原因,我认为也不支持完整的外连接。左外连接本身足以在没有匹配的静态记录时返回流记录。

流媒体和静态数据集上的内部连接和左外部连接不必是有状态的,因为给定窗口中的流式记录集可以与静态记录集匹配。

静态数据和流连接

当我们左边有一个静态数据集而右边有一个流数据集时,只支持内连接和右外连接。不支持左外连接和完全外连接。

在我看来,不需要左外连接,因为只有静态数据将作为微批量的输出返回,这可能没有任何用处。出于同样的原因,我认为也不支持完整的外连接。单独的右外连接足以在没有匹配的静态记录时返回流记录。

静态和流式数据集上的内部连接和右外部连接不必是有状态的,因为给定窗口中的流式记录集将与静态记录集匹配。

摘要

对于两个静态流,支持所有类型的连接。当连接静态和流时,支持内部连接和流数据集的侧面,即如果流式数据集在左侧,则支持左外部连接,否则,支持右外部连接。当连接两个流时,有条件地支持内部,左外部和右外部连接。建议对所有连接应用双面水印和时间约束。

相关文章