删除pyspark中的所有重复实例

删除pyspark中的所有重复实例,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我试着寻找这个,但我能找到的最接近的是。但它没有给我想要的。 我想删除数据帧中的所有重复实例。 例如,如果我有一个数据帧 Col1 Col2 Col3 Alice Girl April Jean Boy Aug Jean Boy Sept 我想删除基于Col1和Col2的所有副本,以便 Col1 Col2 Col3 Alice Girl April 有没有办法做到这一点 另外,如果我有大量这样的列: Col1

我试着寻找这个,但我能找到的最接近的是。但它没有给我想要的。 我想删除数据帧中的所有重复实例。 例如,如果我有一个数据帧

   Col1   Col2   Col3
   Alice  Girl   April
   Jean   Boy    Aug
   Jean   Boy    Sept
我想删除基于Col1和Col2的所有副本,以便

  Col1   Col2  Col3
  Alice  Girl  April
有没有办法做到这一点

另外,如果我有大量这样的列:

   Col1   Col2   Col3  .... Col n
   Alice  Girl   April .... Apple
   Jean   Boy    Aug   .... Orange
   Jean   Boy    Sept  .... Banana
如何仅按Col1和Col2分组,但仍保留其余列

多谢各位

from pyspark.sql import functions as F
# Sample Dataframe
df = sqlContext.createDataFrame([
    ["Alice", "Girl","April"],
   ["Jean","Boy", "Aug"],
   ["Jean","Boy","Sept"]
], 
    ["Col1","Col2", "Col3"])

# Group by on required column and select rows where count is 1.
df2 = (df
       .groupBy(["col1", "col2"])
       .agg(
           F.count(F.lit(1)).alias('count'), 
           F.max("col3").alias("col3")).where("count = 1")).drop("count")

df2.show(10, False)

输出:

+-----+----+-----+
|col1 |col2|col3 |
+-----+----+-----+
|Alice|Girl|April|
+-----+----+-----+
+-----+----+-----+------+
|col1 |col2|col3 |newcol|
+-----+----+-----+------+
|Alice|Girl|April|April |
+-----+----+-----+------+
对编辑版本的答复 输出:

+-----+----+-----+
|col1 |col2|col3 |
+-----+----+-----+
|Alice|Girl|April|
+-----+----+-----+
+-----+----+-----+------+
|col1 |col2|col3 |newcol|
+-----+----+-----+------+
|Alice|Girl|April|April |
+-----+----+-----+------+

感谢您的快速回复!你能解释一下为什么要用F.max吗?我不能只按wherecount=1进行筛选吗?当应用分组时,结果数据帧中所需的所有列都必须应用聚合,否则它们将从结果数据帧中删除。因此,单个where子句将删除col3。如果这是你想要的,请接受答案。干杯,谢谢你,Sunny Shukla。我接受了你的回答,因为公平地说,它回答了我发布的示例中的具体问题。然而,我的实际数据帧包含更多类似Col3的列。有没有一种方法可以在分组后保留所有这些列,而不聚合所有这些额外的列?我已经相应地更新了我的原始帖子,谢谢你更新了另一个回复,以推广相同的内容。在某种意义上,分组需要知道计数,并将max应用于一个单行列,然后返回相同的值,这样就可以了。另一种方法是分组并获取具有单行的行,然后与原始数据集进行内部连接,但这是我们在一次运行中完成的。