Spark 中原生的时间戳缩写日期格式

Timestamp abbreviated date format natively in Spark

我正在使用 sql.functions.unix_timestamp 在 spark 中成功转换为日期的时间戳数字格式(y-m-d、yyyyMMdd 等)。

问题是当日期使用月份或日期的缩写名称时,例如 1991-Aug-09 Fri

有什么方法可以只使用原生spark函数来实现转换吗?

(免责声明: 我知道我可以使用 python 函数来完成,这只是好奇)

您可以使用 (reference - SimpleDateFormat)

yyyy-MMM-dd EEE

格式为 unix_timestamp

spark.sql("SELECT CAST(unix_timestamp('1991-Aug-09 Fri', 'yyyy-MMM-dd EEE') AS TIMESTAMP)").show()
+-------------------------------------------------------------------+
|CAST(unix_timestamp(1991-Aug-09 Fri, yyyy-MMM-dd EEE) AS TIMESTAMP)|
+-------------------------------------------------------------------+
|                                                1991-08-09 00:00:00|
+-------------------------------------------------------------------+

to_date / to_timestamp(Spark 2.2或更高版本):

spark.sql("SELECT to_date('1991-Aug-09 Fri', 'yyyy-MMM-dd EEE')").show()
+--------------------------------------------+
|to_date('1991-Aug-09 Fri', 'yyyy-MMM-dd EEE'|
+--------------------------------------------+
|                                  1991-08-09|
+--------------------------------------------+