Spark SQL中to_date函数匹配含微秒日期串返回Null的原因排查
Spark SQL to_date函数无法识别微秒返回Null的原因分析
核心原因总结
你的推测完全正确,该问题主要与Spark版本及发行版定制化有关,以下是具体拆解:
官方版本兼容性限制
官方Spark 3.0.0及以上版本才正式支持在to_date的日期模式中使用最多6位S匹配微秒。而Spark 2.x及更早版本中,to_date函数对时间部分的小数秒支持存在局限:仅能处理最多3位的毫秒(SSS),使用SSSSSS会被判定为格式不匹配,直接返回Null。第三方发行版的定制差异
你使用的Cloudera发行版(CDH)通常基于旧版Spark定制,比如CDH 6.x系列默认搭载Spark 2.x,自然不支持6位微秒的解析能力。部分厂商发行版即便基于较新的Spark基础版本,也可能因特性裁剪或补丁修改,导致该功能无法正常生效,需要确认具体CDH版本对应的Spark内核版本。旧版本的函数设计缺陷
Spark 3.0之前的to_date函数核心聚焦于日期部分解析,对时间后缀的小数秒处理逻辑不完善。如果使用旧版本,可通过先转换为时间戳再转日期的方式规避问题:to_date(cast("2017-09-09T21:01:12.234433Z" as timestamp))
内容的提问来源于stack exchange,提问作者Prateek Gautam
相关产品推荐
相关产品推荐

