apache-spark - Apache spark 结构化流 2.3.0 如何让接收器知道新行是对现有行的更新?
问题描述
在更新模式下运行时,火花结构化流如何让接收器知道新行是对现有行的更新?它是查看新行的所有列的所有值和现有行的相等匹配还是计算某种哈希?
解决方案
阅读文档,我们看到一些关于更新模式的有趣信息(我添加的粗体格式):
更新模式 - 只有自上次触发后在结果表中更新的行才会写入外部存储(自 Spark 2.1.1 起可用)。请注意,这与 Complete Mode 的不同之处在于,此模式仅输出自上次触发以来已更改的行。如果查询不包含聚合,则相当于 Append 模式。
因此,要使用更新模式,需要进行某种聚合,否则所有数据都将简单地添加到结果表的末尾。反过来,要使用聚合,数据需要使用一个或多个列作为键。由于需要一个键,因此很容易知道一行是否已更新 - 只需将值与表的前一次迭代进行比较(键告诉您要与哪一行进行比较)。在包含 a 的聚合中groupby
,被分组的列是键。
返回单个值的简单聚合不需要键。但是,由于只返回一个值,如果该值发生更改,它将更新。这里的一个例子可能是对一列求和(没有 groupby)。
该文档包含一张可以很好理解这一点的图片,请参阅上面链接中的“快速示例模型”。
推荐阅读
- wordpress - 使用 Wordpress 中的 add_rewrite_rule 将 GET 变量从 url 转换为路径
- php - 重用的对象不会调用`__destruct`?
- java - 从 JAR 读取音频时出现 NullPointerException
- html - HTML嵌套表不嵌套
- java - 片段内的选项卡式布局无法正常工作
- python - 在 TensorFlow 中滚动列表
- linux - bpftrace:uprobe 目标文件不存在或不可执行
- swift - 添加时间间隔。例如小时、分钟和秒
- testing - 假设在进行自动化测试而不是手动测试特定网页时花费更多时间的原因可能是什么?
- sonarqube - 我无法导入 dotCover 报告(Sonarqube)