【发布时间】:2021-03-14 20:49:27
【问题描述】:
我有一个带有名称的 pyspark 数据框列:
| 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
注意:不要使用 udfs 很重要。我可以简单地使用 udf 和列表理解来做我想做的事情,但我希望以最优化的方式做到这一点,因为实际数据有数亿行
【问题讨论】:
-
也许
regex_replace(col("name"), "(?=(.{3})).", r"$1 ")可以吗? -
是的,谢谢!我还是个正则表达式的新手
标签: python regex dataframe apache-spark pyspark