使用 Spark SQL 从 ISO 8601 解析日期时间
Parsing datetime from ISO 8601 using Spark SQL
想做 this 但恰恰相反。
我的 date
格式为 YYYY-MM-DDThh:mm:ss
,我想要两列 YYYY-MM-DD
和 hh:mm
,如果需要,我可以针对某些查询进行连接.
我在使用 convert()
时遇到错误;我假设 Spark SQL 目前不支持此功能。
当我使用 date(datetime)
或 timestamp(datetime)
时,我得到了所有返回的空值。但是,minute(datetime)
和 hour(datetime)
有效。
目前,使用这个
concat(date,' ', hour,':', (case when minute < 10 then concat('0',minute) else minute end)) as DateTime
from (select OtherDateOnlyColumn as date, minute(datetime) as minute, hour(datetime) as hour from ...)
这显然效率不高。
我刚刚在这个查询中尝试使用 date() 并且它有效:
select date(datetime) from df
可能你table中的日期是字符串类型;您应该使用
检查列的数据类型
DESCRIBE your_table
如果日期是字符串类型,您可以使用 Spark SQL 中可用的 cast(datetime as timestamp) as newTimestamp
将日期时间转换回时间戳类型,并从那里使用 date_format(newTimestamp, 'YYYY-MM-dd hh:mm')
的变体。
简单的回答。在 Spark SQL.
中使用日期函数
ISO 8601 日期格式示例:
2017-05-12T00:00:00.000Z
select date(datetime) as parsed_date from table
想做 this 但恰恰相反。
我的 date
格式为 YYYY-MM-DDThh:mm:ss
,我想要两列 YYYY-MM-DD
和 hh:mm
,如果需要,我可以针对某些查询进行连接.
我在使用 convert()
时遇到错误;我假设 Spark SQL 目前不支持此功能。
当我使用 date(datetime)
或 timestamp(datetime)
时,我得到了所有返回的空值。但是,minute(datetime)
和 hour(datetime)
有效。
目前,使用这个
concat(date,' ', hour,':', (case when minute < 10 then concat('0',minute) else minute end)) as DateTime
from (select OtherDateOnlyColumn as date, minute(datetime) as minute, hour(datetime) as hour from ...)
这显然效率不高。
我刚刚在这个查询中尝试使用 date() 并且它有效:
select date(datetime) from df
可能你table中的日期是字符串类型;您应该使用
检查列的数据类型DESCRIBE your_table
如果日期是字符串类型,您可以使用 Spark SQL 中可用的 cast(datetime as timestamp) as newTimestamp
将日期时间转换回时间戳类型,并从那里使用 date_format(newTimestamp, 'YYYY-MM-dd hh:mm')
的变体。
简单的回答。在 Spark SQL.
中使用日期函数ISO 8601 日期格式示例:
2017-05-12T00:00:00.000Z
select date(datetime) as parsed_date from table