从日期中提取字段

Extract fields from date

我有一个数据框,其中日期字段的格式为 "MM/dd/yyyy" 作为字符串,我想在新字段中提取 Scala 中星期几的值。例如,我有数据框 df:

df.show()

------------
date
-----------
12/14/2017
12/13/2017

我想得到以下输出:

--------------------------------------------
date      | day  | month | year | DayOfWeek
--------------------------------------------
12/14/2017| 14   | 12    | 2017 | Thursday
12/13/2017| 13   | 12    | 2017 | Wednesday

我目前有这个代码:

df.withColumn("day", dayofmonth(to_date(df("date"),"MM/dd/yyyy")))
  .withColumn("month", month(to_date(df("date"),"MM/dd/yyyy")))
  .withColumn("year", year(to_date(df("date"),"MM/dd/yyyy")))
  .withColumn("dayofweek", something(to_date...)

我没有找到提取星期几的函数 - 我应该怎么做?

另一个问题,使用函数 dayofmonthmonthyear 是提高性能的最佳选择还是有更好的方法?

您可以使用 date_format 并将格式指定为 "EEEE" 来获取星期几。这将为您提供全名,如果您想要缩短它,只需使用 "E",即 Mon 而不是 Monday。

df.withColumn("dayofweek", date_format(to_date($"date", "MM/dd/yyyy"), "EEEE"))

从性能的角度来看,我认为您不必担心。您正在使用的功能,包括上面的功能,都很快而且不是很复杂。换个角度,如果换一种方式会更快,那么这些函数很可能会使用那种方式。