sql - Spark SQL 不能减少 bigint 数组
问题描述
我正在使用带有 Spark 3.1.1 集群的 databricks 8。我有一个包含 bigint 数组的温度列,但是当我想处理数组的平均值时出现错误:
SELECT
temps,
REDUCE(temps, 0, (t, acc) -> t + acc, acc ->(acc div size(temps))) as avg_daily_temp_c
FROM data
这是错误:
SQL 语句中的错误:AnalysisException: cannot resolve 'aggregate(spark_catalog.default.device_part.
temps
, 0, lambdafunction((CAST(namedlambdavariable() AS BIGINT) + namedlambdavariable()), namedlambdavariable(), namedlambdavariable()), lambdafunction(( CAST(namedlambdavariable() AS BIGINT) div CAST(size(spark_catalog.default.device_part.temps
) AS BIGINT)), namedlambdavariable()))' 由于数据类型不匹配:参数 3 需要 int 类型,然而,'lambdafunction((CAST(namedlambdavariable() AS BIGINT) + namedlambdavariable()), namedlambdavariable(), namedlambdavariable( ))' 是 bigint 类型。第 2 行第 2 行;项目 [temps#1855, aggregate(temps#1855, 0, lambdafunction((cast(lambda t#1857 as bigint) + lambda acc#1858L), lambda t#1857, lambda acc#1858L, false), lambdafunction((cast (lambda acc#1859 as bigint) div cast(size(temps#1855, true) as bigint)), lambda acc#1859, false)) AS avg_daily_temp_c#1842L, time#1856] +- SubqueryAlias spark_catalog.default.device_part + - 关系[battery_level#1850,co2_level#1851,p_device_id#1852L,device_type#1853,signal#1854,temps#1855,time#1856] 实木复合地板
使用另一列array-int,使用相同的代码完全没有问题。任何建议将不胜感激。
解决方案
推荐阅读
- opengl - OpenGL 是否有 glStencilMask 的默认值?
- windows - 如何让我的 .exe 不会在半夜停止?
- python - Numpy 已安装但仍然出现错误
- c++ - 精灵坐标问题
- c# - Hololens - 无法添加外部 dll (IdentityModel.dll)
- sql - 我不明白为什么我的 Athena (Presto) SQL 查询不起作用
- php - Laravel 在出现验证错误后找不到主视图
- jmeter - Apache JMeter 4 - 我可以获得负载测试的文本摘要吗?
- bash - Bash - 自动完成
- 查找所有出现并自动选择一个 - c# - 如果所有内置类型在 C# 中都是不可变的,这是否意味着在为它们分配新值后,它们的内存位置应该改变?