Skip to main content
suri789
Silver ⭐️⭐️
June 10, 2022
Solved

How to remove the space and dots and convert into lowercase in Pyspark

I have a pyspark dataframe with names like

N. Plainfield
North Plainfield
West Home Land
NEWYORK
newyork
So. Plainfield
S. Plaindield

Some of them contain dots and spaces between initials and some do not. How can they be converted to:

 

n Plainfield
north plainfield
west homeland
newyork
newyork
so plainfield
s plainfield

(with no dots and spaces between initials and 1 space between initials and name)

I tried using the following but it only replaces dots and doesn't remove spaces between initials:

names_modified = names.withColumn("name_clean", regexp_replace("name", r"\.",""))

After removing the whitespaces and dots is there any way get the distinct values.
like this.

north plainfield
west homeland
newyork
so plainfield

jagadeesan
Platinum ⭐️
June 15, 2022

Hi @suri789 Can you try this below and share your feedback?

>>> df.show()
+----------------+
| value |
+----------------+
| N. Plainfield|
|North Plainfield|
| West Home Land|
| NEWYORK|
| newyork|
| So. Plainfield|
| S. Plaindield|
| s Plaindield|
|North Plainfield|
+----------------+
>>> from pyspark.sql.functions import regexp_replace, lower
>>> df_tmp=df.withColumn('value', regexp_replace('value', r'\.',''))
>>> df_tmp.withColumn('value', lower(df_tmp.value)).distinct().show()
+----------------+
| value |
+----------------+
| s plaindield|
| n plainfield|
| west home land|
| newyork|
| so plainfield|
|north plainfield|
+----------------+

4 replies

jagadeesan
Platinum ⭐️
Platinum ⭐️
June 15, 2022

Hi @suri789 Can you try this below and share your feedback?

>>> df.show()
+----------------+
| value |
+----------------+
| N. Plainfield|
|North Plainfield|
| West Home Land|
| NEWYORK|
| newyork|
| So. Plainfield|
| S. Plaindield|
| s Plaindield|
|North Plainfield|
+----------------+
>>> from pyspark.sql.functions import regexp_replace, lower
>>> df_tmp=df.withColumn('value', regexp_replace('value', r'\.',''))
>>> df_tmp.withColumn('value', lower(df_tmp.value)).distinct().show()
+----------------+
| value |
+----------------+
| s plaindield|
| n plainfield|
| west home land|
| newyork|
| so plainfield|
|north plainfield|
+----------------+

Translate
suri789
suri789Author
Silver ⭐️⭐️
June 30, 2022

Thanks jagadeesan,

 But Still your getting the duplicate values

Translate
suri789
suri789Author
Silver ⭐️⭐️
June 30, 2022

so plainfield, s plainfiled both are same

Translate