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