我有一个pyspark dataframe列,其名称为:
| name |
--------------
|Lebron James|
|Kyrie Irving|
|Kevin Durant|
我想创建一个新列,如下所示:
| name | trigram |
-----------------------------------------
|Lebron James| Leb ebr bro on Jam ame es
|Kyrie Irving| ...
|Kevin Durant| ...
到目前为止我有
df.withColumn("trigram", regex_replace(col("name"), "([A-Za-z0-9\s]{3})(?!$)", r"$1 "))
但这会产生:
| name | trigram |
--------------------------------------
|Lebron James| Leb ron Ja mes
|Kyrie Irving| Kyr ie Irv ing
|Kevin Durant| Kev in Dur ant
注意:重要的是不要使用UDF。我可以简单地使用udf和列表理解来做我想做的事情,但我希望以最理想的方式来做,因为实际数据有数亿行
你可以用
见regex demo。详情:
(?=(.{3}))
-一个正向的前瞻,它捕获(到组1,$1
)当前位置右侧除换行符以外的三个字符.
-除换行字符外的任何字符,已消耗(将被删除,并由从该字符开始的3字符条纹替换)李>相关问题 更多 >
编程相关推荐