我有一个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
注意:重要的是不要使用自定义项。我可以简单地使用自定义项和列表理解来做我想做的事情,但是我希望以最理想的方式来做,因为实际数据有数亿行
1条答案
按热度按时间lp0sw83n1#
你可以用
查看regex演示。细节:
(?=(.{3}))
-一个积极的前瞻,捕捉到(第1组,$1
)除换行符以外的三个字符立即位于当前位置的右侧.
-除换行符以外的任何字符,被消耗(它将被删除,并被从这个字符开始的3个字符替换)。