Как удалить логические дубликаты из кадра данных? - PullRequest
0 голосов
/ 27 сентября 2018

Предположим, у меня есть таблица данных, где C1 и C2 являются именами столбцов, как показано ниже:

+-----|-----|
|C1   | C2  |
+-----|-----|
|a    |  b  |
|c    |  d  |
|b    |  a  |
+-----|-----|

Я хочу, чтобы логические дубликаты, т.е. строка (b, a) была удалена из приведенного вышеТаблица.

Я попытался с самостоятельным присоединением, но не смог продолжить.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

вы можете создать новый столбец со значениями C1 и C2, отсортировать их и использовать dropDuplicates для удаления дубликатов (комментарии приведены для ясности)

import org.apache.spark.sql.functions._
df
  .withColumn("sortedCol", sort_array(array("C1", "C2")))  //creating a new sorted array column which contains the values of other columns
  .dropDuplicates("sortedCol")  //dropping duplicate columns which are logically same 
  .drop("sortedCol")    //removing the new column
  .show(false)

Надеюсь, ответ полезен

0 голосов
/ 27 сентября 2018

С "кроме":

val df = List(
  ("a", "b"),
  ("c", "d"),
  ("b", "a")).toDF("C1", "C2")

df.except(df.where($"C1" > $"C2")).show(false)

Выход:

+---+---+
|C1 |C2 |
+---+---+
|a  |b  |
|c  |d  |
+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...