如何在Spark中使用正则表达式从字符串列中提取日期

时间:2019-04-23 07:59:50

标签: regex scala apache-spark

我有一个包含文件名,电子邮件和其他详细信息的数据框。需要从列文件名之一获取日期。

Ex:文件名:Test_ 04_21_2019 _34600.csv

需要提取日期:04_21_2019

数据框

{% for hit in hitcount.hits %}
    {{ hit.ip }}<br/>
    {{ hit.created }}
{% endfor %}

待输出

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")

我们可以在spark数据帧上使用正则表达式来实现此目的还是通过其他任何方式来实现此目的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用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|
+--------------------+--------------+------+----------+