从日期中提取字段

时间:2017-12-14 12:26:53

标签: 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
--------------------------------------------
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的功能 - 我应该怎么做?

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

1 个答案:

答案 0 :(得分:2)

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

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

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