Pandas on Spark重采样报错:规则码不支持及datetime类型错误
解决PySpark Pandas API重采样及时间操作错误的方案
一、resample规则不支持的问题
Pandas on Spark的resample方法不兼容原生Pandas的规则缩写(比如'1min'、's'),需要使用Spark标准的时间间隔全称格式,比如'1 minute'、'60 seconds'、'1 hour'。
正确的1分钟粒度重采样代码:
# 按1分钟粒度重采样并计算均值 df.resample('1 minute').mean()
也可以用等价的秒数写法:
df.resample('60 seconds').mean()
二、时间索引floor/round操作的类型错误问题
Pandas on Spark的datetime索引底层对应Spark的Timestamp类型,直接调用index.floor()这类原生Pandas方法会触发类型兼容错误,推荐以下两种解决方式:
方法1:将索引转为列,用Spark原生时间函数处理后重置索引
from pyspark.sql import functions as F # 将时间索引转为普通列 df = df.reset_index() # 对时间列执行floor操作(示例为按秒粒度) df = df.withColumn("timestamp", F.floor_date(df["timestamp"], "second")) # 重新设置时间列为索引 df = df.set_index("timestamp")
方法2:若时间字段为普通列,直接使用dt访问器处理
如果时间数据不是索引而是普通列,可直接用Pandas on Spark的dt访问器操作:
# 假设时间列名为timestamp,按秒粒度floor df["timestamp"] = df["timestamp"].dt.floor("second")
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

