如何在Spark(Databricks)中将葡语格式字符串转为日期时间?
解决葡语时间字符串转Spark Timestamp的问题
问题原因
转换失败有两个核心原因:
- 原字符串包含葡语连接词
de,不属于日期格式组成部分,你用的格式串d MMM yyyy hh:mm:ss无法匹配带de的字符串。 - Spark默认locale不识别葡语月份缩写(比如
jan对应葡语janeiro),必须指定葡萄牙语(巴西)的locale才能解析。
解决方案
分两步处理:先清理字符串中的冗余内容,再指定locale解析时间。
1. 导入依赖
from pyspark.sql import functions as f
2. 清理时间字符串
用正则替换移除字符串中的de(注意前后空格,避免误删其他内容):
df = df.withColumn("clean_date", f.regexp_replace(f.col("date_column"), r" de ", " "))
处理后字符串会变成8 jan 2014 08:57:15,匹配格式串的结构。
3. 指定Locale解析为Timestamp
使用to_timestamp时传入locale="pt_BR"参数,同时注意小时格式:24小时制用HH,12小时制用hh(根据实际数据调整):
df_result = df.select( f.to_timestamp(f.col("clean_date"), "d MMM yyyy HH:mm:ss", locale="pt_BR").alias("new_date_column") )
验证结果
执行后new_date_column会正确转换为Spark Timestamp类型,不会返回NaT值。
内容的提问来源于stack exchange,提问作者marloswn
相关产品推荐
相关产品推荐

