PySpark中如何将多日期字段合并为单个Timestamp列
解决DataFrame日期字段转Timestamp类型的问题
现有如下结构的DataFrame:
| year | month | day | weekday | hour |
|---|---|---|---|---|
| 2017 | January | 1 | Sunday | 0 |
| 2018 | September | 22 | Saturday | 11 |
需要新增一个Timestamp类型的列,期望结果格式为:
2017-01-01 00:00:00 2018-09-22 11:00:00
可行解决方案
直接利用Spark的to_timestamp函数,配合字段拼接和正确的格式字符串即可实现,不需要绕路用unix_timestamp。
Python 实现代码
from pyspark.sql import functions as F # 新增timestamp列 df = df.withColumn( "timestamp_col", F.to_timestamp( # 用空格拼接年、月、日、小时字段 F.concat_ws(" ", F.col("year"), F.col("month"), F.col("day"), F.col("hour")), # 指定匹配的格式:年份+英文全称月份+日期+小时 "yyyy MMMM dd HH" ) )
Scala 实现代码
import org.apache.spark.sql.functions._ val df = df.withColumn( "timestamp_col", to_timestamp( concat_ws(" ", $"year", $"month", $"day", $"hour"), "yyyy MMMM dd HH" ) )
为什么之前用unix_timestamp失败?
unix_timestamp默认只识别yyyy-MM-dd HH:mm:ss这类格式,而你拼接的是带英文全称月份的字符串,格式不匹配导致解析失败。用to_timestamp并指定对应格式字符串,能直接完成类型转换,步骤更简洁。
内容的提问来源于stack exchange,提问作者Shubhomoy Das
相关产品推荐
相关产品推荐

