首页 > 解决方案 > 在 cassandra db 中执行用户定义的聚合函数时出现 ServerError:java.lang.AssertionError

问题描述

我已经在我的 cassandra db 中实现了用户定义的聚合函数平均值,如链接https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useCreateUDA.html中所述

创建或替换函数 avgState ( state tuple<int,bigint>, val int ) 调用 NULL 输入返回 tuple<int,bigint> LANGUAGE java AS 'if (val !=null) { state.setInt(0, state.getInt( 0)+1); state.setLong(1, state.getLong(1)+val.intValue()); } 返回状态;';

创建或替换函数 avgFinal ( state tuple<int,bigint> ) 在 NULL 输入返回时调用 double LANGUAGE java AS 'double r = 0; if (state.getInt(0) == 0) 返回空值;r = state.getLong(1); r/= state.getInt(0); 返回 Double.valueOf(r);';

如果不存在则创建聚合平均 (int) SFUNC avgState STYPE tuple<int,bigint> FINALFUNC avgFinal INITCOND (0,0);

当查询返回至少一行进行聚合时,用户定义的聚合函数平均值可以正常工作。但是当聚合没有返回行时,查询输出错误ServerError: java.lang.AssertionError

请求帮助。

我的 cassandra db 版本是 [cqlsh 5.0.1 | 卡桑德拉 3.10 | CQL 规范 3.4.4 | 本机协议 v4]

提前致谢,乔治

标签: cassandra

解决方案



推荐阅读