Spark SQL如何将整数类型日期转为正确格式以使用dayofweek函数
Spark SQL整数格式YYYYMMDD字段转日期解决方案
错误原因
直接将整数类型的日期值CAST为Timestamp时,Spark会默认把整数值识别为Unix时间戳(距离1970-01-01 00:00:00的秒数/毫秒数),你给出的19860102作为秒数计算后自然得到1970年左右的错误时间。
纯SQL实现方案(无需调用F开头的DataFrame内置函数)
核心逻辑是先将整数字段转为字符串,再通过日期解析函数指定yyyyMMdd格式完成转换,所有逻辑都可以直接在SQL语句中实现:
- 转换为标准DATE类型:
SELECT to_date(cast(date AS string), 'yyyyMMdd') AS correct_date FROM table
- 转换为标准TIMESTAMP类型:
SELECT to_timestamp(cast(date AS string), 'yyyyMMdd') AS correct_ts FROM table
- 直接调用
dayofweek计算星期:
SELECT dayofweek(to_date(cast(date AS string), 'yyyyMMdd')) AS week_day FROM table
注:
dayofweek返回值范围为1(周日)到7(周六),符合标准SQL规范。
内容的提问来源于stack exchange,提问作者Katty_one
相关产品推荐
相关产品推荐

