我已经阅读了不同的输出模式,如:
完整模式-整个更新的结果表格将写入接收器。
追加模式-只有自上次触发后追加到“结果表”中的新行才会写入外部存储器。
更新模式-只有自上次触发后在结果表中更新的行将写入外部存储器
起初我以为我理解了上面的解释。
然后我发现了这个
**文件接收器支持的模式:**追加
**Kafka接收器支持的模式:**附加、更新、完成
等等!!什么??!!
为什么我们不能把整个结果表写出来存档呢?
我们怎样才能更新Kafka中已经存在的条目呢?它是一个流,你不能只是寻找某些信息并改变/更新它们。
这完全说不通。
你能帮我理解一下吗?我只是不明白技术上是怎么回事
1条答案
按热度按时间wixjitnu1#
Spark在每个分区写一个文件,通常每个执行器写一个文件。执行器以分布式方式运行。文件对于每个执行器来说都是本地的,所以append是有意义的--你不能完全替换单个文件,特别是在不丢失流中数据的情况下。所以你只能“append new files to filesystem",或者插入到现有文件中。
Kafka没有更新功能...... Kafka Integration Guide没有提到这些模式中的任何一种,所以不清楚你指的是什么。你使用
write
或writeStream
。它总是将“完整的” Dataframe 批“附加”到Kafka主题的末尾。Kafka实现类似更新的方式是使用压缩的主题,但这与Spark无关。