使用PySpark将字符串转换为DateTime时未生效,请求排查问题
PySpark字符串转DateTime问题排查
输入数据
+--------------+ | col1 | +--------------+ |18300031121994| |18300031122018| |12324031012020| |19590031052020| |19590030062020| +--------------+
期望输出
col1 1994-12-31 18:30:00 2018-12-31 18:30:00 2020-01-31 12:32:40 2020-05-31 19:59:00 2020-06-30 19:59:00
问题代码
df.select(col("col1"),to_date(col("col1"),"hhmmssMMddyyyy").alias("datetime")).show()
错误原因
你的代码存在两个关键问题:
- 函数选择错误:
to_date仅能将字符串转换为日期类型(仅含年月日),无法保留时分秒信息,而你需要的是包含完整时间的DateTime类型。 - 格式字符串不匹配:输入字符串的结构是
时分秒日月年(例如18300031121994对应18时30分00秒 31日12月1994年),但你使用的格式hhmmssMMddyyyy把月份(MM)和日期(dd)的顺序写反了,导致解析失败,最终直接返回原始字符串。
修正方案
使用to_timestamp函数替代to_date,并调整格式字符串为正确的HHmmssddMMyyyy:
from pyspark.sql.functions import col, to_timestamp df.select( col("col1"), to_timestamp(col("col1"), "HHmmssddMMyyyy").alias("datetime") ).show(truncate=False)
说明
to_timestamp:生成包含年月日时分秒的Timestamp类型,符合你的期望输出格式。HHmmssddMMyyyy:对应输入字符串的结构:HH:24小时制的小时(适配18、19这类大于12的小时数)mm:分钟ss:秒dd:日期MM:月份yyyy:年份
执行修正后的代码,即可得到符合预期的DateTime类型输出。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

