使用 groupBy 函数删除重复列

drop duplicates columns with a groupBy funtion

您好,我有以下数据框

NAME ID   VER
 A.  650.  true
 A.   230.  false
 B.   430.  false
 B.   230.  false
 C.   125.  true
 C.   230.  false

所以这里的目标是删除重复的列,只保留一个。在这里我想删除第二行,因为它与第一行具有相同的名称,但 VER 等于 false。

最后一列名称为 C 的相同,我们只保留具有真实 Ver 的列,对于 B 列,我们保留它们,因为没有 Ver 等于 true。

预期的结果是

  NAME ID   VER
 A.  650.  true
 B.   430.  false
 B.   230.  false
 C.   125.  true
 

所以在这里我考虑了一个按名称分区的 window 函数,然后过滤 VER 以仅保留具有真实 Ver

的名称

不知道如何用 spark 实现这个 SQL

您可以根据给定名称是否存在任何 True 添加标志列:

spark.sql("""
    select NAME, ID, VER 
    from (
        select *, 
            max(VER) over(partition by NAME) == false or VER as flag 
        from df
    ) 
    where flag
""").show()
+----+----+-----+
|NAME|  ID|  VER|
+----+----+-----+
|  A.|650.| true|
|  C.|125.| true|
|  B.|430.|false|
|  B.|230.|false|
+----+----+-----+

下面是join的使用方法。

spark.sql("""
    SELECT a.NAME, a.ID, a.VER
      FROM df a
      LEFT JOIN (
           SELECT DISTINCT NAME
             FROM df
            WHERE VER = true) b
        ON a.NAME = b.NAME
     WHERE (b.NAME IS NOT NULL AND a.VER = true)
        or (b.NAME IS NULL AND a.VER = false)
""")

+----+---+-----+
|NAME|ID |VER  |
+----+---+-----+
|A   |650|true |
|B   |430|false|
|B   |230|false|
|C   |125|true |
+----+---+-----+