PySpark中yyyy-mmm-dd格式日期转换为20180112格式的实现方法
Spark DataFrame日期格式转换:从2018-Jan-12到20180112
刚好处理过类似的需求,这里给你Python和Scala两种常用Spark开发语言的实现方案,核心思路是先将字符串格式的日期解析为Spark标准日期类型,再格式化为你需要的yyyyMMdd格式字符串。
Python 实现示例
假设你的DataFrame名为df,待转换的日期列名为date_col:
from pyspark.sql import functions as F # 新增格式化后的列,或者直接替换原列 df = df.withColumn( "formatted_date", F.date_format(F.to_date(F.col("date_col"), "yyyy-MMM-dd"), "yyyyMMdd") )
代码说明:
F.to_date(F.col("date_col"), "yyyy-MMM-dd"):把字符串类型的日期解析成Spark的DateType,其中MMM对应英文月份缩写(比如Jan、Feb),这个格式符是基于Java的SimpleDateFormat规范的。F.date_format(..., "yyyyMMdd"):将解析后的日期类型转成目标格式字符串,yyyy代表4位年份,MM是2位月份,dd是2位日期,连起来就是20180112这种无分隔符的格式。
Scala 实现示例
同样假设DataFrame名为df,日期列名为date_col:
import org.apache.spark.sql.functions.{col, date_format, to_date} val df = df.withColumn( "formatted_date", date_format(to_date(col("date_col"), "yyyy-MMM-dd"), "yyyyMMdd") )
注意事项:语言环境问题
如果你的Spark集群默认语言不是英文,解析月份缩写(比如Jan)可能会失败,这时候需要指定英文Locale:
- Python版本修改:
F.to_date(F.col("date_col"), "yyyy-MMM-dd", "en_US")
- Scala版本修改:
to_date(col("date_col"), "yyyy-MMM-dd", java.util.Locale.US)
内容的提问来源于stack exchange,提问作者Heether
相关产品推荐
相关产品推荐

