Удалить из фрейма данных уникальные строки

#pyspark

#pyspark

Вопрос:

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

В приведенном ниже примере строки DF1 0 и 3 должны быть удалены

         A      B       C
0       5    100       5
1       1    200       5
2       1    150       4
3       3    500       5
 

Единственное решение, о котором я думал до сих пор, это:

  1. groupby(A)
  2. подсчет строк в каждой группе
  3. отсеять количество отсчетов > 1
  4. сохранить результат в DF2
  5. DF1.пересечение (DF2)

есть еще идеи? решение для RDD также может помочь, но лучше для фрейма данных Спасибо!

Ответ №1:

Более сжатый синтаксис (но следуя тому же подходу):

 df=sqlContext.createDataFrame([[5,100,5],[1,200,5],[1,150,4],[3,500,5]],['A','B','C'])
df.registerTempTable('df') # Making SQL queries possible
df_t=sqlContext.sql('select A,count(B) from df group by A having count(B)=1') # step 1 to 4 in 1 statement
df2=df.join(df_t,df.A==df_t.A,'leftsemi') # only keep records that have a matching key
 

Некоторые люди называют ‘leftsemi’ как ‘left keep’. Он хранит записи фрейма данных 1, если ключ также существует в df_t.