我有一个流数据,从kafka传入dataFrame。 我想删除基于ID的重复项,并根据时间戳保留最新记录。
样本数据如下:
restrict
我期望的输出是:
Id Name count timestamp
1 Vikas 20 2018-09-19T10:10:10
2 Vijay 50 2018-09-19T10:10:20
3 Vilas 30 2018-09-19T10:10:30
4 Vishal 10 2018-09-19T10:10:40
1 Vikas 50 2018-09-19T10:10:50
4 Vishal 40 2018-09-19T10:11:00
1 Vikas 10 2018-09-19T10:11:10
3 Vilas 20 2018-09-19T10:11:20
旧的重复项将被删除,并且根据timestamp字段仅保留最近的记录。
我正在为时间戳字段使用水印。 我尝试使用“ df.removeDuplicate”,但它可以使较旧的记录保持完整,并且任何新记录都将被丢弃。
当前代码如下:
Id Name count timestamp
1 Vikas 10 2018-09-19T10:11:10
2 Vijay 50 2018-09-19T10:10:20
3 Vilas 20 2018-09-19T10:11:20
4 Vishal 40 2018-09-19T10:11:00
如何实现自定义dedup方法,以便将最新记录保留为唯一记录?
感谢您的帮助。
答案 0 :(得分:2)
在删除重复项之前先对timestamp列进行排序。
df.withWatermark("timestamp", "1 Day")
.sort($"timestamp".desc)
.dropDuplicates("Id", "timestamp")