apache-spark - 未找到 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
是什么,我做错了什么吗?
解决方案
推荐阅读
- wpf - 绑定到嵌套字典 - 我如何声明 DictionaryEntry 是集合/字典?
- python-3.x - 如何在 xpath 中动态添加类名?
- vb.net - 查找两列时间之间的时间数据
- bash - 通过 xterm 导出变量并运行脚本
- c# - 检查文本是否包含字符串列表中的任何字符串项 c# linq
- spring-boot - org.apache.ibatis.type.TypeException:别名“Criterion”已映射到值“com.xxx.domain.def.GameListExample$Criterion”
- r - 用函数替换多个“summarize”语句
- google-play - 用户如何获得旧版本的 apk?
- python - selenium browser driver decode error中文
- kotlin - 使用 Kotlin 将 Hex 值转换为 Base64