PySpark:Regex替换组

PySpark:Regex替换组,pyspark,Pyspark,我正在尝试基于一个公共ID连接两个表,但是这些文件中的日期不匹配,我正在尝试将其正常化 鉴于这些数据: +-------+-------------------+----------------------------+ |dataset|id |topic | +-------+-------------------+----------------------------+ |2020A |112829056633

我正在尝试基于一个公共ID连接两个表,但是这些文件中的日期不匹配,我正在尝试将其正常化

鉴于这些数据:

+-------+-------------------+----------------------------+
|dataset|id                 |topic                       |
+-------+-------------------+----------------------------+
|2020A  |1128290566331031552|papuaNewguineaEarthquake2019|
|2020A  |1128293303659716608|papuaNewguineaEarthquake2019|
|2020A  |1152200235847966726|athensEarthquake2019        |
|2020A  |1152204892083281920|athensEarthquake2019        |
|2020A  |1152220394008522753|athensEarthquake2019        |
+-------+-------------------+----------------------------+
例如,我如何将
papuaNewguineaEarthquake2019
中的
2019
替换为
数据集
列中值的前四个数字,以便:

2019年巴布亚新几内亚地震
变为
2020年巴布亚新几内亚地震


换句话说,如何使用正则表达式将一列中的子组替换为另一列中的子组?

您可以使用
expr
函数

我正在使用
regexp\u extract
dataset
列中提取前4位数字,并使用
regexp\u extract
的输出替换
topic
列的最后4位数字

前4位的正则表达式:
(^[0-9]{4})

最后4位的正则表达式:
([0-9]{4}$)


您可以使用
expr
功能

我正在使用
regexp\u extract
dataset
列中提取前4位数字,并使用
regexp\u extract
的输出替换
topic
列的最后4位数字

前4位的正则表达式:
(^[0-9]{4})

最后4位的正则表达式:
([0-9]{4}$)

from pyspark.sql.functions import expr

df.withColumn("dataset_year",expr("regexp_extract(dataset, '(^[0-9]{4})')"))\
    .withColumn("topic",expr("regexp_replace(topic, '([0-9]{4}$)'\
    , dataset_year)")).drop('dataset_year').show(truncate=False)

+-------+-------------------+----------------------------+
|dataset|id                 |topic                       |
+-------+-------------------+----------------------------+
|2020A  |1128290566331031552|papuaNewguineaEarthquake2020|
|2020A  |1128293303659716608|papuaNewguineaEarthquake2020|
|2020A  |1152200235847966726|athensEarthquake2020        |
|2020A  |1152204892083281920|athensEarthquake2020        |
|2020A  |1152220394008522753|athensEarthquake2020        |
+-------+-------------------+----------------------------+