Apache如何激发结构化流2.3.0让接收器知道新行是现有行的更新?

时间:2018-05-16 09:27:10

标签: apache-spark spark-streaming spark-structured-streaming

当以更新模式运行时,Spark结构化流式传输如何让接收器知道新行是现有行的更新?它是否会查看新行的所有列的所有值以及相等匹配的现有行,还是会计算某种哈希值?

1 个答案:

答案 0 :(得分:1)

阅读documentation,我们会看到一些有关更新模式的有趣信息(由我添加的粗体格式):

  

更新模式 - 只有自上次触发后在结果表中更新的行才会写入外部存储(自Spark 2.1.1起可用)。请注意,这与完整模式的不同之处在于此模式仅输出自上次触发后已更改的行。 如果查询不包含聚合,则它将等同于附加模式

因此,要使用更新模式,需要进行某种聚合,否则所有数据都将简单地添加到结果表的末尾。反过来,要使用聚合,数据需要使用一个或多个coulmns作为密钥。由于需要密钥,因此很容易知道某行是否已更新 - 只需将这些值与表的上一次迭代进行比较(该键告诉您要与哪一行进行比较)。在包含groupby的聚合中,分组的列是键。

返回单个值的简单聚合不需要密钥。但是,由于只返回一个值,因此如果更改了该值,它将更新。这里的一个例子可以是一列的总和(没有groupby)。

该文档包含一张能够很好地理解这一点的图片,请参阅上面链接中的“快速示例模型”。