在Spark

时间:2019-06-04 05:38:21

标签: apache-spark apache-spark-sql spark-streaming

我有一个数据框,其中包含基于列的重复记录。我的要求是根据该列删除重复项,并对唯一记录执行某些操作。并根据列标识重复记录,并将其保存到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 ") 这应该包含删除的记录

    • 不使用“ dropDuplicates”直接使用排名功能

datasetWithDupes.withColumn("rank", functions.row_number().over(Window.partitionBy("A").seq()).orderBy("B").seq())))

然后根据排名进行过滤以获取重复记录。

有没有更快的方法来获取重复的记录,因为我正在流应用程序中使用它,并且大多数时间(50%)都在查找重复的记录并将其保存到hbase表的过程中消耗了。我的批处理间隔为10秒,大约花5秒钟的时间来执行过滤重复记录的任务。

请建议以更快的方式实现。

0 个答案:

没有答案