将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
相关产品推荐
相关产品推荐

