如何为流-流连接指定保留时间?

时间:2019-12-12 17:16:51

标签: apache-spark spark-structured-streaming

我想了解Spark中结构化流的保留时间。

我有不同的Spark结构化流:

  • 流A:从时间t0开始每10秒到达一次;
  • 流B:从时间t0开始每10秒到达一次;
  • 流C:从时间t1开始每10秒到达一次;

我需要在这些数据上使用pandas udf应用机器学习模型。流A和流B独立进行。 来自流C的数据在处理之前需要与流A和B结合在一起。

我的问题是:如何确保不丢弃流A和流B中处理的数据?仅使用水印就足以实现这一目标?

1 个答案:

答案 0 :(得分:0)

  

如何确保不丢弃流A和流B中处理的数据?仅使用水印就可以实现这一目标?

是的。流-流连接的状态会一直保留,因此您的第一个问题可以直接解决,而第二个问题则需要水印和“其他连接条件”。

引用Inner Joins with optional Watermarking

  

支持任何种类的列上的内部联接以及任何种类的联接条件。但是,随着流的运行,流状态的大小将无限期地增长,因为必须保存所有过去的输入,因为任何新输入都可以与过去的任何输入匹配。为了避免无限制的状态,您必须定义其他联接条件,以使无限期的旧输入不能与将来的输入匹配,因此可以从状态中清除。

     
      
  1. 定义两个输入上的水印延迟,以便引擎知道输入的延迟(类似于流聚合)

  2.   
  3. 在两个输入之间定义事件时间约束,以便引擎可以确定何时不需要为与另一个输入匹配而需要一个输入的旧行(即不满足时间约束)。输入。

  4.