Spark SQL如何将CSV读取的MMddHHmm格式日期转为指定时分格式
问题原因
你出现时分信息丢失的核心原因是使用了to_date()函数解析时间字符串:to_date()只会保留日期(月、日)维度的数据,会自动丢弃时分部分,所以后续格式化时会默认用00:00填充,才会输出02-19 12:00 AM的错误结果。
解决方案
将to_date()替换为to_timestamp()解析完整的时间字符串即可,如果你需要输出小写的am/pm,可以再嵌套一层lower()函数匹配你的预期格式。
修正后的完整查询代码
spark.sql(""" SELECT lower(date_format(to_timestamp(date, 'MMddHHmm'), 'MM-dd hh:mm a')) as date, delay, origin, destination FROM us_delay_flights_tbl WHERE delay > 120 AND ORIGIN = 'SFO' AND DESTINATION = 'ORD' ORDER by delay DESC """).show(10, truncate=False)
效果验证
- 输入字符串
02190925,转换后输出:02-19 09:25 am - 输入字符串
01031755,转换后输出:01-03 05:55 pm
完全符合你给出的预期输出示例。
内容的提问来源于stack exchange,提问作者Alexander Lopatin
相关产品推荐
相关产品推荐

