Dataframe 如何删除姓名首字母中的点和空格

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"

我有一个pyspark数据框,其名称如下:

  • J.J.斯科特
  • 乔伊斯
  • 房车。布拉德利卡特
其中一些在首字母之间包含点和空格,而另一些则不包含。如何将它们转换为:

  • 司各特
  • 乔伊斯酒店
  • 布莱德利卡特房车
(首字母之间没有点和空格,首字母和姓名之间有1个空格)

我尝试使用以下内容,但它只替换点,不删除首字母之间的空格:

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|
+------------------+-----------------+