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

Spark使用date_trunc截断timestamp至小时报错求助

问题分析与解决

数据表

job_idtimestampavg_Tag_value
j12023-03-19T01:52:00.000+00000.4
j22023-03-19T01:53:00.000+00000.5
j32023-03-19T01:54:00.000+00000.6

报错信息

AnalysisException: cannot resolve 'timestamp' given input columns: [date_trunc(hour, timestamp)];

原因

执行df = df.select(date_trunc("hour", "timestamp"))后,新生成的DataFrame只保留了date_trunc(hour, timestamp)这一列,原timestamp列被丢弃。如果后续代码仍尝试引用timestamp列,就会触发“无法解析该列”的报错。

解决方案

  1. 保留原列并新增截断列(推荐)
    如果需要保留所有原始列,同时添加小时级截断后的时间列,使用withColumn:
from pyspark.sql.functions import date_trunc

df = df.withColumn("hour_truncated", date_trunc("hour", "timestamp"))

执行后,DataFrame会保留job_id、timestamp、avg_Tag_value,同时新增hour_truncated列。

  1. 仅保留截断列(需指定别名)
    如果确实只需要截断后的时间列,给计算结果起别名,避免后续操作混淆:
from pyspark.sql.functions import date_trunc

df = df.select(date_trunc("hour", "timestamp").alias("hour_truncated"))

此时DataFrame仅包含hour_truncated列,后续操作使用该列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:10