Лучший способ получить удаленные записи после использования функции «dropDuplicates» в Spark - PullRequest
0 голосов
/ 04 июня 2019

У меня есть фрейм данных, который содержит дубликаты записей на основе столбца. Мое требование - удалить дубликаты на основе столбца и выполнить определенную операцию с уникальными записями. А также определите дублирующую запись на основе столбца и сохраните ее в 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 секунд тратится на фильтрацию дублирующихся записей.

Пожалуйста, предложите достичь быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...