#pyspark
#PySpark
Вопрос:
Я пытаюсь объединить две таблицы на основе общего идентификатора, но в этих файлах есть несоответствие в датах, которое я пытаюсь нормализовать.
Учитывая эти данные:
------- ------------------- ----------------------------
|dataset|id |topic |
------- ------------------- ----------------------------
|2020A |1128290566331031552|papuaNewguineaEarthquake2019|
|2020A |1128293303659716608|papuaNewguineaEarthquake2019|
|2020A |1152200235847966726|athensEarthquake2019 |
|2020A |1152204892083281920|athensEarthquake2019 |
|2020A |1152220394008522753|athensEarthquake2019 |
------- ------------------- ----------------------------
Как бы я, например, заменил 2019
in papuaNewguineaEarthquake2019
на первые четыре числа значения в dataset
столбце, чтобы:
papuaNewguineaEarthquake2019
становится papuaNewguineaEarthquake2020
?
Другими словами, как мне использовать регулярное выражение для замены подгруппы в одном столбце подгруппой в другом столбце?
Ответ №1:
Вы можете использовать эту expr
функцию.
Я использую regexp_extract
для извлечения первых 4 цифр из dataset
столбца и regexp_replace
замены последних 4 цифр topic
столбца выводом regexp_extract
.
Регулярное выражение для первых 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 |
------- ------------------- ----------------------------