Найти тему
Машинное обучение

Как удалить дубли в датасете при работе с Apache Spark?

Используйте следующие методы API-интерфейсов фреймворка:

distinct() ¬- самый простой и часто использующийся способ убрать из датафрейма идентичные повторяющиеся строки

dropDuplicates() – в отличие от distinct(), который не принимает аргументов вообще, в аргументах dropDuplicates() можно указать подмножество столбцов для удаления повторяющихся записей. Поэтому dropDuplicates(Seq <String> colNames) больше подходит, когда нужно обработать только некоторые столбцы из исходного набора данных.

reduceByKey() – возвращает новый RDD - распределенный набор данных из пар «ключ-значение» (K, V), в котором все значения для одного ключа объединяются в кортеж - ключ и результат выполнения функции reduce для всех значений, связанных с этим ключом. Этот метод удаления дублей ограничен размером Scala-кортежа, который содержит от 2 до 22 элементов. Поэтому reduceByKey() не стоит использовать, когда в ключах или значениях Spark RDD более 22 столбцов.

collect_set() - функция из API-интерфейса Spark SQL собирает и возвращает набор уникальных элементов. Она не является детерминированной, т.к. порядок результатов зависит от порядка строк, который может измениться после перемешивания, и представляет собой не «настоящую» дедупликацию. По сути, collect_set() – это сворачивание записей путем выполнения groupBy() и сбора уникальных значений для столбца, относящегося к каждой группе.

написать собственную оконную функцию, чтобы обойти ограничение размера кортежей Scala. Например, разделить RDD по столбцам, отсортировать их и отфильтровать нужные значения.

Методы удаления дубликатов в Apache Spark
Методы удаления дубликатов в Apache Spark