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

如何使用PySpark将1910-01-01 00:03:01.5转换为毫秒数值

PySpark 时间字符串转毫秒时间戳实现方案

方案1:内置函数实现(推荐,性能最优)

直接使用PySpark官方提供的日期处理函数完成转换,无需自定义逻辑,适合大数据量处理场景,支持1970年之前的时间转换。

实现逻辑

  • 第一步:用to_timestamp函数将字符串格式的时间转换为Timestamp类型,需指定和输入匹配的格式串yyyy-MM-dd HH:mm:ss.S
  • 第二步:用unix_timestamp函数将Timestamp转换为秒级时间戳,乘以1000得到整秒对应的毫秒值
  • 第三步:用millisecond函数提取Timestamp的毫秒部分,和上一步结果相加得到最终的毫秒级时间戳

可运行示例代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import to_timestamp, unix_timestamp, millisecond, col

# 初始化Spark会话
spark = SparkSession.builder.appName("time_convert").getOrCreate()

# 构造测试数据
test_df = spark.createDataFrame([("1910-01-01 00:03:01.5",)], ["time_str"])

# 执行转换
result_df = test_df.withColumn(
    # 转成Timestamp类型
    "ts", to_timestamp(col("time_str"), "yyyy-MM-dd HH:mm:ss.S")
).withColumn(
    # 计算毫秒时间戳
    "ms_ts", unix_timestamp(col("ts")) * 1000 + millisecond(col("ts"))
)

# 输出结果
result_df.show(truncate=False)

运行后输出的ms_ts字段就是对应的毫秒数值,1910年的时间结果为负数属于正常现象,因为UNIX时间戳以1970-01-01 00:00:00 UTC为零点,零点之前的时间统一返回负数值。

方案2:自定义UDF实现(兼容性好)

如果使用的PySpark版本较低不支持millisecond函数,可以用自定义UDF结合Python的datetime库实现,适合小数据量或者特殊格式的时间处理场景。

可运行示例代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import udf, col
from datetime import datetime

# 初始化Spark会话
spark = SparkSession.builder.appName("time_convert_udf").getOrCreate()
# 构造测试数据
test_df = spark.createDataFrame([("1910-01-01 00:03:01.5",)], ["time_str"])

# 定义转换UDF
@udf("long")
def convert_to_ms(time_str: str) -> int:
    dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
    return int(dt.timestamp() * 1000)

# 执行转换
result_df = test_df.withColumn("ms_ts", convert_to_ms(col("time_str")))

# 输出结果
result_df.show(truncate=False)

注意事项

  • 时区处理:如果输入的时间字符串属于特定时区,需提前设置Spark会话时区避免偏移,例如设置东八区可以执行spark.conf.set("spark.sql.session.timeZone", "Asia/Shanghai")
  • 格式兼容:如果输入时间的毫秒位数不固定(1位到3位都有),可以将格式串修改为yyyy-MM-dd HH:mm:ss[.SSS],方括号包裹的部分为可选匹配项。

内容的提问来源于stack exchange,提问作者Mareena Francis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 02:30:01