首页 > 解决方案 > 未找到 date_trunc 属性

问题描述

我正在创建一个粘合作业,它将从 s3 读取信息,执行查询并输出结果。要运行的查询如下所示:

SELECT 
  date_trunc('hour', hourly_report.time) as hour, 
  sum(cost) as costs FROM table 
FROM hourly_report
GROUP BY 1

我将数据加载到 aDynamicFrame中,创建了 a DataFrame df,并创建了数据的临时视图。

df.createTempView("hourly_report")

然后我尝试在视图上运行查询

spark.sql("SELECT date_trunc('hour', hourly_report.time) as hour, sum(cost) as costs FROM table FROM hourly_report GROUP BY 1")

这会导致错误:

pyspark.sql.utils.AnalysisException: u"Undefined function: 'date_trunc'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7"

这看起来很奇怪,但我试图通过使用 udf 来执行 date_trunc 而不是使用 sql date_trunc 函数来解决这个问题:

import pyspark.sql.functions as sf
spark.udf.register("date_truncate", lambda x: sf.date_trunc('hour',x), TimestampType())
spark.sql("SELECT date_truncate(hourly_report.time) as hour, sum(cost) as costs FROM table FROM hourly_report GROUP BY 1")

这会导致不同的错误:

AttributeError: 'module' object has no attribute 'date_trunc'

对时间戳列执行操作的正确方法date_trunc是什么,我做错了什么吗?

标签: apache-sparkpysparkpyspark-sqlaws-glue

解决方案


推荐阅读