首页 > 解决方案 > 是否可以选择找出具有重复数据的 spark 内部表列值

问题描述

我正在尝试找出 spark 内部表中的行,其中name列中有重复的数据。例如,考虑以下数据集,其中名称列中有重复的文本。我试图找到这些行并删除重复的数据。

Input data
    Id   Name
    1    dil dil 
    2    lid
    3    tik tok
    4    tik tik 

Expected output data
    Id   Name
    1    dil 
    2    lid
    3    tik tok
    4    tik  

但在某些情况下,我有某些名称,其中也有 3 个部分,如下所示abc def ghi 。作为abc def ghi abc def ghi . 所以我无法在那些场景中找到模式

标签: sqlapache-sparkpysparkapache-spark-sql

解决方案


您可以匹配重复名称的正则表达式,并且只提取第一次出现:

df.show(truncate=False)
+---+---------------------------+
|Id |Name                       |
+---+---------------------------+
|1  |dil dil                    |
|2  |lid                        |
|3  |tik tok                    |
|4  |tik tik                    |
|5  |dileep vikram dileep vikram|
|6  |abc def ghi abc def ghi    |
|7  |dileep vikram dileep       |
+---+---------------------------+

df.createOrReplaceTempView('df')
result = spark.sql(r"""
select Id, case when length(Name2) = 0 then Name else Name2 end Name
from (
    select Id, Name, regexp_extract(Name, '(.*)\\s+\\1+', 1) Name2
    from df
)
order by Id
""")

result.show()
+---+--------------------+
| Id|                Name|
+---+--------------------+
|  1|                 dil|
|  2|                 lid|
|  3|             tik tok|
|  4|                 tik|
|  5|       dileep vikram|
|  6|         abc def ghi|
|  7|dileep vikram dileep|
+---+--------------------+

推荐阅读