我有一个数据框,其中包含基于列的重复记录。我的要求是根据该列删除重复项,并对唯一记录执行某些操作。并根据列标识重复记录,并将其保存到hbase中以供审核。
输入文件:
A,B
1,2
1,3
2,5
Dataset<Row> datasetWithDupes=session.read().option("header","true").csv("inputfile");
//drop dupliactes on column A
Dataset<Row> datasetWithoutDupes = datasetWithDupes.dropDuplicates("A")
需要数据集并删除记录。我尝试了2个选项
使用除功能
Dataset<Row> droppedRecords = datasetWithDupes.except("datasetWithoutDupes ")
这应该包含删除的记录
datasetWithDupes.withColumn("rank", functions.row_number().over(Window.partitionBy("A").seq()).orderBy("B").seq())))
然后根据排名进行过滤以获取重复记录。
有没有更快的方法来获取重复的记录,因为我正在流应用程序中使用它,并且大多数时间(50%)都在查找重复的记录并将其保存到hbase表的过程中消耗了。我的批处理间隔为10秒,大约花5秒钟的时间来执行过滤重复记录的任务。
请建议以更快的方式实现。