如何在Databricks中使用PySpark返回yyyyMMdd格式的日期?
解决PySpark返回指定日期格式的问题
问题根源
你之前的代码仅在WHERE子句中转换日期格式用于条件匹配,但SELECT的仍是原始mydates日期字段。Spark的Date类型字段本身没有固定格式,yyyy-MM-dd是它默认的字符串展示形式,所以即便条件匹配成功,返回的字段还是日期类型,显示出来依然带横杠。
正确解决方法
要得到yyyyMMdd格式的结果,需要在SELECT阶段将日期字段转换为字符串类型,同时保证WHERE条件的匹配逻辑正确。
方法一:纯SQL写法
from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df = spark.sql(""" SELECT date_format(mydates, 'yyyyMMdd') AS mydates FROM xxxxx WHERE date_format(mydates, 'yyyyMMdd') = date_format(last_day(add_months(current_date(), -1)), 'yyyyMMdd') """)
方法二:PySpark函数API写法
from pyspark.sql import SparkSession from pyspark.sql.functions import date_format, last_day, add_months, current_date spark = SparkSession.builder.getOrCreate() # 读取目标表 raw_df = spark.table("xxxxx") # 过滤符合条件的数据并转换日期格式 result_df = raw_df.filter( date_format(raw_df.mydates, "yyyyMMdd") == date_format(last_day(add_months(current_date(), -1)), "yyyyMMdd") ).select( date_format(raw_df.mydates, "yyyyMMdd").alias("mydates") )
额外说明
- 你之前尝试的
add_months(current_date(),'yyyyMMdd'-1)是错误写法:add_months的第二个参数必须是整数(月份数),不能用日期格式字符串做运算,这也是该代码无结果返回的原因。 - 如果不把日期字段转为字符串,仅靠修改显示格式是无法得到
yyyyMMdd结果的,因为Date类型的展示规则由Spark默认控制。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

