在 PySpark 中,使用 regexp_replace,如何用另一列的值替换一个组?
In PySpark, using regexp_replace, how to replace a group with value from another column?
我有一个包含两列的数据框:filename
和 year
。我想用 year
列
中的值替换 filename
中的年份值
下面第三栏table说明了要求:
+----------------------------+------+----------------------------+
| filename | year | reqd_filename |
+----------------------------+------+----------------------------+
| blah_2020_v1_blah_blah.csv | 1975 | blah_1975_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
| blah_2019_v1_blah_blah.csv | 1984 | blah_1984_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
代码目前如下所示:
df = df.withColumn('filename', F.regexp_replace(F.col('filename',), '(blah_)(.*)(_v1.*)', <Nothing I put here works>))
简而言之,我想用 df
中的 year
列替换第二组
您可以使用 expr 执行此操作。
我使用 ([0-9]{4})
作为正则表达式模式来检测 filename
中的年份。
from pyspark.sql.functions import expr
df.withColumn("reqd_filename",expr("regexp_replace(filename, \
'([0-9]{4})', year)")).show()
+--------------------------+----+--------------------------+
|filename |year|reqd_filename |
+--------------------------+----+--------------------------+
|blah_2020_v1_blah_blah.csv|1975|blah_1975_v1_blah_blah.csv|
|blah_2019_v1_blah_blah.csv|1984|blah_1984_v1_blah_blah.csv|
+--------------------------+----+--------------------------+
我有一个包含两列的数据框:filename
和 year
。我想用 year
列
filename
中的年份值
下面第三栏table说明了要求:
+----------------------------+------+----------------------------+
| filename | year | reqd_filename |
+----------------------------+------+----------------------------+
| blah_2020_v1_blah_blah.csv | 1975 | blah_1975_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
| blah_2019_v1_blah_blah.csv | 1984 | blah_1984_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
代码目前如下所示:
df = df.withColumn('filename', F.regexp_replace(F.col('filename',), '(blah_)(.*)(_v1.*)', <Nothing I put here works>))
简而言之,我想用 df
中的year
列替换第二组
您可以使用 expr 执行此操作。
我使用 ([0-9]{4})
作为正则表达式模式来检测 filename
中的年份。
from pyspark.sql.functions import expr
df.withColumn("reqd_filename",expr("regexp_replace(filename, \
'([0-9]{4})', year)")).show()
+--------------------------+----+--------------------------+
|filename |year|reqd_filename |
+--------------------------+----+--------------------------+
|blah_2020_v1_blah_blah.csv|1975|blah_1975_v1_blah_blah.csv|
|blah_2019_v1_blah_blah.csv|1984|blah_1984_v1_blah_blah.csv|
+--------------------------+----+--------------------------+