Как удалить дубликаты, учитывая только подмножество столбцов? - PullRequest
0 голосов
/ 06 июля 2018

Я использую Spark 1.6 и выполняю внутреннее объединение на двух кадрах данных следующим образом:

val filtergroup = metric
  .join(filtercndtns, Seq("aggrgn_filter_group_id"), inner)
  .distinct()

Но я продолжаю получать повторяющиеся значения в столбце aggrgn_filter_group_id. Можете ли вы предложить какое-нибудь решение?

1 Ответ

0 голосов
/ 08 июля 2018

Искра <2.0 </h2> Рассмотрим distinct в наборе данных со столбцом (столбцами) для удаления дубликатов с последующим внутренним соединением в столбце (столбцах). // don't use distinct yet val filtergroup = metric .join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner") // take unique aggrgn_filter_group_ids val uniqueFilterGroups = filtergroup .select("aggrgn_filter_group_id") .distinct // Inner join to remove duplicates from the source dataset filtergroup.join(uniqueFilterGroups, Seq("aggrgn_filter_group_id"), "inner") Цена за выполнение дополнительных select с distinct и join, но должна дать вам ожидаемый результат. Искра> = 2,0

Следующее решение будет работать только с Spark 2.0 + , который вышел с поддержкой операторов dropDuplicates и позволяет отбрасывать дубликаты, учитывая только подмножество столбцов.

Цитирование документации :

друг (): набор данных [T] Возвращает новый набор данных, который содержит только уникальные строки из этого набора данных. Это псевдоним для dropDuplicates.

distinct или dropDuplicates просто отбросьте дубликаты строк, сравнивая каждый столбец.

Если вас интересует конкретный столбец, вы должны использовать один из dropDuplicates, например,

val filtergroup = metric
  .join(filtercndtns, Seq("aggrgn_filter_group_id"), "inner")
  .dropDuplicates("aggrgn_filter_group_id")

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

...