我正在阅读有关 Spark 结构化流连接的信息,并遇到了静态到流数据集支持的连接类型。我有一个问题,为什么不支持它,因为据我了解,在给定的时间点,流数据帧的行为类似于静态,当我们将静态与流结合起来时,它应该可以工作。如果支持以下
如果我们更改数据帧的方向,则不支持它,也不支持完全外连接。让我知道我在这里缺少什么。本质上我想了解它不被支持的原因是什么,到底发生了什么阻止了 Spark 支持它。
以左外连接为例,其中左表是流,右表是静态的。假设我们的左(流)表看起来像这样,当您想要执行右外连接时。
身份证 | 价值 |
---|---|
1 | 值1 |
3 | 值3 |
现在,假设正确的(静态)数据框如下所示:
身份证 | 其他价值 |
---|---|
1 | 其他值1 |
2 | 其他值2 |
3 | 其他价值3 |
如果我们能够及时冻结流表,并进行连接,它会看起来像这样:
ID_x | 价值 | ID_y | 其他价值 |
---|---|---|---|
1 | 值1 | 1 | 其他值1 |
空 | 空 | 2 | 其他值2 |
3 | 值3 | 3 | 其他价值3 |
现在流传送以下记录:
身份证 | 价值 |
---|---|
2 | 值2 |
那么这个应该如何加入呢?唯一的选择是“更新”连接中的值,而不是简单地追加。因为流数据被设计为仅追加,所以这破坏了连接的机制。连接中的其中一行(ID_x 为 NULL 且 ID_y 为 2 的第二行)必须从数据集中清除,但它已在连接中传递。 这就是为什么这是不可能的。这不是一个技术挑战,而是一个逻辑挑战。