PySpark自定义格式时间转Epoch秒报错,如何正确传参?
PySpark时间转Epoch秒数问题解决
报错原因
T是时间字符串里的普通分隔字符,但在unix_timestamp的格式参数中,未用单引号包裹的字符会被当作格式匹配符解析。而Spark底层依赖的Java SimpleDateFormat规则里,没有以T作为匹配符的定义,因此触发"Unknown pattern letter: T"错误。
正确的格式写法
需要把格式串中的固定文本T和Z用单引号包裹,明确告知解析器这是无需匹配格式的固定字符:
.withColumn("startedDateTime_ts", F.unix_timestamp("startedDateTime", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ"))
更简洁的替代方案
你的时间字符串是标准ISO 8601格式,Spark 3.x版本可以直接用to_timestamp自动解析,再转换为long类型得到Epoch秒数:
.withColumn("startedDateTime_ts", F.to_timestamp("startedDateTime").cast("long"))
如果需要保留毫秒级精度,可以使用unix_millis函数:
.withColumn("startedDateTime_ts", F.unix_millis(F.to_timestamp("startedDateTime")))
关键规则说明
Spark的unix_timestamp格式参数完全遵循Java SimpleDateFormat规范,所有不属于格式匹配符的固定文本,都需要用单引号包裹来避免被误解析为格式规则。
内容的提问来源于stack exchange,提问作者user2913139
相关产品推荐
相关产品推荐

