(11)流式去重

数据在网络中由采集到最终处理结束时会存在一条数据在某一个点被重复接受处理的。比如,kafka支持的是至少一次写语义。因此,当写数据到kafka的时候,有些记录可能重复。比如,如果kafka重复发一个消息,该消息一经被broker接收并写入文件但是并没有应答,这种就可能重复。由于kafka的此种写语义,structured streaming不能阻止该种类型数据重复。因此,一旦写入成功,可以假设查询输出是以最少一次语义写入kafka的。一个可行去除重复记录的解决方案是数据中引入一个primary(unique)key,这样就可以在读取数据的时候实行去重。

可以使用事件中的唯一标识符对数据流中的记录进行重复数据删除。这与使用唯一标识符列的静态重复数据删除完全相同。该查询将存储来自先前记录的一定量的数据,以便可以过滤重复的记录。与聚合类似,您可以使用带有或不带有watermark 的重复数据删除功能。

,带watermark:如果重复记录可能到达的时间有上限,则可以在事件时间列上定义watermark ,并使用guid和事件时间列进行重复数据删除。

,不带watermark:由于重复记录可能到达时间没有界限,所以查询将来自所有过去记录的数据存储为状态。

 

package bigdata.spark.StructuredStreaming.KafkaSourceOperator

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.get_json
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值