#regex #scala #apache-spark
#регулярное выражение #scala #apache-spark
Вопрос:
У меня есть фрейм данных, который состоит из имени файла, электронной почты и других сведений. Необходимо извлечь даты из него из одного из имен файла столбца.
Пример: Имя файла: Test_04_21_2019_34600.csv
Необходимо извлечь дату: 04_21_2019
Фрейм данных
val df1 = Seq(
("Test_04_21_2018_1200.csv", "abc@gmail.com",200),
("home/server2_04_15_2020_34610.csv", "abc1@gmail.com", 300),
("/server1/Test3_01_2_2019_54680.csv", "abc2@gmail.com",800))
.toDF("file_name", "email", "points")
Вывод должен быть
date email points
04_21_2018 abc@gmail.com 200
04_15_2020 abc1@gmail.com 300
01_2_2019 abc2@gmail.com 800
Можем ли мы использовать регулярное выражение в spark dataframe для достижения этого или любым другим способом для достижения этого. Любая помощь будет оценена.
Ответ №1:
Вы можете использовать функцию regexp_extract для извлечения даты, как показано ниже
val resultDF = df1.withColumn("date",
regexp_extract($"file_name", "\d{1,2}_\d{1,2}_\d{4}", 0)
)
Вывод:
-------------------- -------------- ------ ----------
| file_name| email|points| date|
-------------------- -------------- ------ ----------
|Test_04_21_2018_1...| abc@gmail.com| 200|04_21_2018|
|home/server2_04_1...|abc1@gmail.com| 300|04_15_2020|
|/server1/Test3_01...|abc2@gmail.com| 800| 01_2_2019|
-------------------- -------------- ------ ----------