Dataframe 如何删除姓名首字母中的点和空格
我有一个pyspark数据框,其名称如下:Dataframe 如何删除姓名首字母中的点和空格,dataframe,apache-spark,pyspark,apache-spark-sql,regexp-replace,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Regexp Replace,我有一个pyspark数据框,其名称如下: J.J.斯科特 乔伊斯 房车。布拉德利卡特 其中一些在首字母之间包含点和空格,而另一些则不包含。如何将它们转换为: 司各特 乔伊斯酒店 布莱德利卡特房车 (首字母之间没有点和空格,首字母和姓名之间有1个空格) 我尝试使用以下内容,但它只替换点,不删除首字母之间的空格: names_modified = names.withColumn("name_clean", regexp_replace("name"
- J.J.斯科特
- 乔伊斯
- 房车。布拉德利卡特
- 司各特
- 乔伊斯酒店
- 布莱德利卡特房车
names_modified = names.withColumn("name_clean", regexp_replace("name", r"\.",""))
谢谢 可以使用
变换
进行一些进一步的操作。其思想是使用空格分割名称,并通过仅在长度超过1个字符的字符串之间添加空格来重新组合名称,这样首字母就可以在不使用空格的情况下组合
import pyspark.sql.functions as F
names_modified = names.withColumn(
'name_clean',
F.expr("""
concat_ws('',
transform(
split(replace(name, '.', ''), ' '),
(x, i) -> case when i = 0 then x
when length(x) > 1 then concat(' ', x)
else x
end
)
)
""")
)
names_modified.show()
+------------------+-----------------+
| name| name_clean|
+------------------+-----------------+
| J.J. Scott| JJ Scott|
| J. S. Joyce| JS Joyce|
|RV. Bradley Carter|RV Bradley Carter|
+------------------+-----------------+