如何在PySpark中无需UDF转换特定格式时间字符串为标准格式
PySpark无UDF实现时间格式转换
不需要编写UDF,用Spark自带的两个函数组合就能搞定,之前to_timestamp返回null是因为没指定匹配输入格式的模板,具体操作如下:
核心思路
- 先通过
to_timestamp指定正确的输入格式,把原始字符串转成Timestamp类型(这一步解决null问题) - 再用
date_format把Timestamp类型转成你需要的yyyy-MM-dd HH:mm:ss格式字符串
代码示例
假设你的DataFrame里存原始时间的列叫raw_time,直接这么写:
from pyspark.sql import functions as F df = df.withColumn( "standard_time", F.date_format( # 第一个参数是原始时间列,第二个是输入格式模板 F.to_timestamp(F.col("raw_time"), "MM/dd/yy hh:mm"), # 目标输出格式 "yyyy-MM-dd HH:mm:ss" ) )
效果验证
比如输入值5/1/21 1:30,处理后standard_time列会得到2021-05-01 01:30:00,完全符合要求。
注意事项
- 格式模板要对应准:
MM是月份(1-12),dd是日期,yy是两位年份,hh是12小时制的小时;如果你的输入是24小时制,要把hh换成HH - 原始字符串的格式必须和模板匹配,不然还是会解析失败返回null
内容的提问来源于stack exchange,提问作者J Learner
相关产品推荐
相关产品推荐

