Spark DataFrame转Pandas报错:不支持无单位datetime64类型转换
问题复现与临时解决方法
我创建了一个演示DataFrame来复现在Databricks中遇到的错误:
from pyspark.sql.types import StructType, StructField, TimestampType, StringType from datetime import datetime # 定义Schema schema = StructType([ StructField("session_ts", TimestampType(), True), StructField("analysis_ts", TimestampType(), True) ]) # 定义包含datetime对象的数据 data = [ (datetime(2023, 9, 15, 17, 30, 41), datetime(2023, 9, 15, 17, 47, 3)), (datetime(2023, 10, 24, 18, 23, 37), datetime(2023, 10, 24, 18, 25, 16)), (datetime(2024, 1, 15, 6, 38, 52), datetime(2024, 1, 15, 6, 48, 15)), (datetime(2024, 2, 21, 13, 16, 37), datetime(2024, 2, 21, 13, 22, 35)), (datetime(2023, 10, 18, 17, 52, 28), datetime(2023, 10, 19, 17, 11, 3)) ] # 创建DataFrame df = spark.createDataFrame(data, schema=schema)
当尝试将PySpark DataFrame转换为Pandas DataFrame时,触发错误:
TypeError: Casting to unit-less dtype 'datetime64' is not supported. Pass e.g. 'datetime64[ns]' instead.
执行的代码为:
df.toPandas().head()
尝试将字段重新转换为TimestampType并未解决该错误:
df = df.withColumn("session_ts", df["session_ts"].cast(TimestampType())) df = df.withColumn("analysis_ts", df["analysis_ts"].cast(TimestampType())) df.toPandas()
目前只能通过将字段转换为StringType作为临时解决方法:
df = df.withColumn("session_ts", df["session_ts"].cast(StringType())) df = df.withColumn("analysis_ts", df["analysis_ts"].cast(StringType())) df.toPandas()
(截图显示该方法可正常运行)
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

