You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何将datetime字符串转换为不含毫秒的datetime类型值

Spark 时间格式转换实现方案

你遇到的输出为NULL的问题基本都是时间解析函数和输入的ISO8601格式不匹配导致的,可分别通过以下两种方式实现转换:

1. SQL语句内直接实现

直接在Spark SQL调用内置函数完成转换,无需额外处理数据:

SELECT 
  date_format(
    -- 兼容老版本Spark可手动指定输入格式避免NULL:to_timestamp(DateColumn, "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'")
    to_timestamp(DateColumn),
    'yyyy-MM-dd hh:mm:ss a'
  ) AS formatted_datetime
FROM table

格式说明:

  • yyyy-MM-dd:对应年-月-日
  • hh:12小时制小时,必须配合代表AM/PM的a标识使用,如需24小时制可替换为HH并去掉末尾的a
  • mm:ss:对应分-秒
  • a:自动输出AM/PM标识

2. SQL语句外(Python端)实现

如果已经拿到SQL查询返回的DataFrame,也可以在Python侧完成转换,有两种可选方式:

方式1:基于PySpark DataFrame原生API处理

from pyspark.sql.functions import col, to_timestamp, date_format

# 执行原始SQL拿到原始数据
original_df = spark.sql('select DateColumn from table')
# 新增格式化后的时间列
processed_df = original_df.withColumn(
    'formatted_datetime',
    date_format(to_timestamp(col('DateColumn')), 'yyyy-MM-dd hh:mm:ss a')
)
# 输出验证结果
processed_df.show(truncate=False)

方式2:转为Pandas DataFrame后用Python datetime处理

from datetime import datetime
import pandas as pd

original_df = spark.sql('select DateColumn from table').toPandas()

def convert_iso_format(ts_str):
    # 处理Z后缀,适配fromisoformat的格式要求
    dt = datetime.fromisoformat(ts_str.replace('Z', '+00:00'))
    # 按目标格式输出
    return dt.strftime('%Y-%m-%d %I:%M:%S %p')

original_df['formatted_datetime'] = original_df['DateColumn'].apply(convert_iso_format)

内容的提问来源于stack exchange,提问作者Roger Steinberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:36:01