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

如何使用Python一步创建带timestamp类型的Spark DataFrame

PySpark 3.1.2 单步创建带Timestamp类型的DataFrame方案

你不需要单独提前声明schema变量,直接将schema定义内嵌到createDataFrame调用中即可实现一步创建,以下是几种可行的实现方式:

方案1:兼容原有逻辑的内嵌写法

直接把原代码中单独赋值的schema定义作为参数传入createDataFrame,无需单独定义schema_sdf变量,运行效果和原有两步写法完全一致:

from pyspark.sql.functions import *
from pyspark.sql.types import *

sdf = spark.createDataFrame(
    [(to_timestamp(lit("2022-06-29 12:01:19.000")), 0)],
    schema=StructType([
        StructField("ts", TimestampType(), True),
        StructField("myColumn", LongType(), True)
    ])
)

方案2:使用Python原生datetime对象简化时间传参

不需要嵌套调用to_timestamp(lit())包装时间字符串,直接传入Python原生datetime对象,Spark会自动识别匹配TimestampType,代码更简洁:

from pyspark.sql.types import *
from datetime import datetime

sdf = spark.createDataFrame(
    [(datetime(2022, 6, 29, 12, 1, 19), 0)],
    schema=StructType([
        StructField("ts", TimestampType(), True),
        StructField("myColumn", LongType(), True)
    ])
)

方案3:使用DDL字符串极简定义schema

Spark支持直接传DDL格式的字符串作为schema,省去StructType的冗长定义,代码量最少:

from pyspark.sql.functions import to_timestamp, lit

sdf = spark.createDataFrame(
    [(to_timestamp(lit("2022-06-29 12:01:19.000")), 0)],
    schema="ts timestamp, myColumn long"
)

以上三种方案创建出的DataFrame执行printSchema()都会输出如下结构,完全符合类型要求:

root
 |-- ts: timestamp (nullable = true)
 |-- myColumn: long (nullable = true)

内容的提问来源于stack exchange,提问作者Luk-StackOverflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:01:40