pyspark中的日期格式



我有一个带有日期列的数据框架,其中存在不同类型的日期格式。我想验证和提取仅具有日期格式'MM-dd-yy'的记录,但当我验证和提取时,我也获得了格式为"'MM-dd-yyyy'."的记录。提取格式为"'MM-dd-yy'?"的记录的正确格式是什么?

from pyspark.sql import functions as F,Window
df = sc.parallelize([['12-21-20'],
['05-30-2020'],
['01-01-1984'],
['12-24-20']]).toDF(["Date"])
df.show()
+----------+
|      Date|
+----------+
|  12-21-20|
|05-30-2020|
|01-01-1984|
|  12-24-20|
+----------+
spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY")
df=df.filter(~F.col("Date").isNotNull()|
to_date(F.col("Date"),'MM-dd-yy').isNotNull()) 
display(df)
+----------+
|      Date|
+----------+
|  12-21-20|
|05-30-2020|
|01-01-1984|
|  12-24-20|
+----------+

预期输出:

+----------+
|      Date|
+----------+
|  12-21-20|
|  12-24-20|
+----------+

我发现了一个简单的方法,不使用to_date,而是使用regexp_extract

df = df.filter((F.regexp_extract('Date', '(d{2}-d{2}-d{2})$', 1) != '') & 
(F.to_date('Date', 'MM-dd-yy').isNotNull()))
df.show()
+--------+
|    Date|
+--------+
|12-21-20|
|12-24-20|
+--------+

您可以指定格式为MM-dd-yyyy,它将在00后面添加两个数字的年份,您可以基于此进行过滤。

df.where(to_date(F.col("Date"),'MM-dd-yyyy').rlike('^00[1-9]+') &
to_date(F.col("Date"),'MM-dd-yyyy').isNotNull()).show()
+--------+
|    Date|
+--------+
|12-21-20|
|12-24-20|
+--------+

using rlike and to_date

>>> df.filter((f.col("Date").rlike('^d{2}-d{2}-d{2}$')) 
& (f.to_date(f.col("Date"), "MM-dd-yy")).isNotNull()).show()
+--------+
|    Date|
+--------+
|12-21-20|
|12-24-20|
+--------+

相关内容

  • 没有找到相关文章

最新更新