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

将PySpark DataFrame转Pandas时遇datetime64类型错误的解决方法

解决PySpark DataFrame转Pandas时的datetime64类型错误

你遇到的错误源于PySpark与Pandas在时间戳类型的单位处理上不兼容:PySpark的TimestampType默认传递的时间戳未明确单位,而Pandas要求datetime类型必须指定具体单位(如datetime64[ns])。

下面提供两种可行的解决方法:

方法一:配置Spark会话的Arrow优化参数

启用PySpark的Arrow优化,并指定时间戳单位为纳秒(ns),让PySpark和Pandas的时间戳单位对齐,从根源解决类型不匹配问题:

from datetime import datetime
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, TimestampType

# 初始化Spark会话并添加关键配置
spark = SparkSession.builder.appName("test").getOrCreate()
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
spark.conf.set("spark.sql.execution.arrow.pyspark.fallback.enabled", "false")
spark.conf.set("spark.sql.execution.arrow.pyspark.timestampUnit", "ns")

data= [
    ("A", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("B", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("C", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("D", 1, datetime(2023, 5, 19, 12, 5, 0)),
]

schema = StructType(
    [   
        StructField('id_col', StringType(), True),
        StructField('id2_col', IntegerType(), True),
        StructField('timestamp', TimestampType(), True),
    ]
)

dfs = spark.createDataFrame(data=data, schema=schema)
dfp = dfs.toPandas()

方法二:转换后手动指定Pandas列类型

若无法修改全局Spark配置,可在转换完成后手动将timestamp列的类型指定为datetime64[ns](注:若转换过程直接报错,此方法可能不适用,优先选择方法一):

dfp = dfs.toPandas()
dfp['timestamp'] = dfp['timestamp'].astype('datetime64[ns]')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:35