PySpark如何将DataFrame的Timestamp列转为YYYY-MM-DD格式字符串?
在PySpark中将Timestamp列转换为'YYYY-MM-DD'格式字符串的方法
当然可以!在PySpark里把Timestamp类型的列转换成指定格式的字符串是很常见的操作,这里有两种常用的方法,你可以根据需求选择:
方法一:使用date_format函数(灵活自定义格式)
这是最通用的方法,支持任意日期格式的转换,完全满足你要的'YYYY-MM-DD'格式需求。
代码示例:
from pyspark.sql import SparkSession from pyspark.sql.functions import date_format # 初始化SparkSession spark = SparkSession.builder.appName("TimestampToDateString").getOrCreate() # 构造测试DataFrame(假设已有包含Timestamp列的数据集) sample_data = [("2023-05-12 08:45:30",), ("2024-03-20 16:20:00",)] df = spark.createDataFrame(sample_data, ["original_timestamp"]) # 转换Timestamp列为指定格式的字符串 formatted_df = df.withColumn( "date_string", date_format("original_timestamp", "yyyy-MM-dd") # 这里用yyyy对应常规年份,若需周基年份可换为YYYY ) # 查看结果 formatted_df.show(truncate=False)
注意点:
- 格式字符串里的
yyyy代表常规公历年份,而YYYY是基于周的年份(比如某些跨年的周会归属到下一年的周基年份),绝大多数业务场景下用yyyy就足够了,如果你有特殊的周基年份需求再替换成YYYY。 date_format函数还支持更多格式符,比如HH:mm:ss表示时分秒,非常灵活。
方法二:先转Date类型再转字符串(简洁高效)
如果你的需求只是提取Timestamp中的日期部分并转成'YYYY-MM-DD'字符串,这种方法更简洁:
代码示例:
from pyspark.sql import SparkSession from pyspark.sql.functions import to_date spark = SparkSession.builder.appName("TimestampToDateString").getOrCreate() sample_data = [("2023-05-12 08:45:30",), ("2024-03-20 16:20:00",)] df = spark.createDataFrame(sample_data, ["original_timestamp"]) # 先将Timestamp转为Date类型,再强制转换为字符串 formatted_df = df.withColumn( "date_string", to_date("original_timestamp").cast("string") ) formatted_df.show(truncate=False)
原理:
to_date函数会自动截断Timestamp的时分秒部分,只保留日期信息;而Date类型转成字符串时,默认就是'yyyy-MM-dd'的格式,刚好符合你的需求。
内容的提问来源于stack exchange,提问作者Partha Sarkar
相关产品推荐
相关产品推荐

