Scala 从日期中提取字段

Scala 从日期中提取字段,scala,date,apache-spark,spark-dataframe,Scala,Date,Apache Spark,Spark Dataframe,我有一个数据框,其中的日期字段采用字符串格式,格式为“MM/dd/yyyy”,我想在新字段中提取Scala中一周中某一天的值。例如,我有数据帧df: df.show() ------------ date ----------- 12/14/2017 12/13/2017 我希望获得以下输出: -------------------------------------------- date | day | month | year | DayOfWeek -----------

我有一个数据框,其中的日期字段采用字符串格式,格式为
“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...)
我没有找到提取dayofweek的函数-我应该怎么做


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

您可以使用
date\u格式
并将格式指定为
“EEEE”
,以获取星期几。这将为您提供全名,如果您希望缩写,只需使用
“E”
,即Mon而不是Monday

df.withColumn("dayofweek", date_format(to_date($"date", "MM/dd/yyyy"), "EEEE"))
从性能的角度来看,我认为您不必担心。您正在使用的函数,包括上面的函数,都是快速且不太复杂的。从另一个角度来看,如果另一种方式更快,那么这些函数很可能会使用这种方式