从数据框中删除唯一行

时间:2016-10-16 17:24:00

标签: pyspark

我遇到了这样的问题:我需要从数据框

中删除列A中唯一值的行

在下面的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.intersect(DF2)
  6. 还有其他想法吗? RDD的解决方案也可以提供帮助,但对DataFrame更好 谢谢!

1 个答案:

答案 0 :(得分:2)

更简洁的语法(但遵循相同的方法):

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

有些人提到的是左派' as' left keep'。如果密钥也存在于df_t中,它会保留数据帧1的记录。