PySpark中如何将Long类型值转换为yyyy-mm-dd日期格式
在PySpark中将Long类型时间戳转换为日期格式
你提供的数值1206946690是秒级时间戳,PySpark可以通过内置函数快速完成转换,以下是两种常用实现方式:
方法一:直接转换并格式化日期
使用from_unixtime()将秒级时间戳转为带时间的字符串,再通过date_format()提取yyyy-MM-dd格式的日期部分:
from pyspark.sql import SparkSession from pyspark.sql.functions import from_unixtime, date_format # 初始化SparkSession spark = SparkSession.builder.appName("TimestampToDate").getOrCreate() # 构造示例数据 sample_data = [(1206946690,)] df = spark.createDataFrame(sample_data, ["timestamp_long"]) # 执行转换 df = df.withColumn("formatted_date", date_format(from_unixtime("timestamp_long"), "yyyy-MM-dd")) # 查看结果 df.show(truncate=False)
执行后输出:
+--------------+-------------+ |timestamp_long|formatted_date| +--------------+-------------+ |1206946690 |2008-03-31 | +--------------+-------------+
方法二:先转Timestamp类型再提取日期
先将Long类型转换为Spark的TimestampType,再用to_date()直接获取日期:
from pyspark.sql import SparkSession from pyspark.sql.functions import to_timestamp, to_date spark = SparkSession.builder.appName("TimestampToDate").getOrCreate() sample_data = [(1206946690,)] df = spark.createDataFrame(sample_data, ["timestamp_long"]) # 先转Timestamp,再提取日期 df = df.withColumn("timestamp", to_timestamp("timestamp_long")) \ .withColumn("formatted_date", to_date("timestamp")) df.show(truncate=False)
此方法输出结果与方法一完全一致,to_date()默认返回yyyy-MM-dd格式的日期字符串。
注意事项
如果你的时间戳是毫秒级(数值末尾带有3个0,比如1206946690000),需要先将数值除以1000再执行转换,示例:
df = df.withColumn("formatted_date", date_format(from_unixtime("timestamp_long"/1000), "yyyy-MM-dd"))
内容的提问来源于stack exchange,提问作者Rama rao
相关产品推荐
相关产品推荐

