【发布时间】:2020-10-28 19:33:24
【问题描述】:
我正在尝试使用 Java 编写 UDF in Cassandra。
我有两个具有一对一映射的整数列表,即第一个列表中的第一项对应于第二个列表中的第一项。这就是我的数据存储在 Cassandra 表中两列列表类型下的方式。
我的UDF
CREATE OR REPLACE FUNCTION mykeyspace.get_thread(list1 List<int>, list2 List<int>)
CALLED ON NULL INPUT
RETURNS List<int>
LANGUAGE java
AS '
Map<Integer, Integer> intermediatemap = new HashMap<Integer, Integer>();
for (int i = 0; i < list1.size(); i++) {
if (!intermediatemap.containsKey(i))
intermediatemap.put(list1.get(i), list2.get(i));
}
List<Integer> commentids = new ArrayList<Integer>();
intermediatemap.entrySet().stream()
.sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed())
.forEachOrdered(x -> commentids.add(x.getKey()));
if (commentids.size() > 8)
return commentids.subList(0, 8);
else
return commentids;
';
这一切都像代码一样运行良好。但是,当我在 cqlsh 上执行此操作时,我收到错误提示
InvalidRequest: Error from server: code=2200 [Invalid query] message="Java source compilation failed:
Line 8: The type java.util.stream.Stream cannot be resolved. It is indirectly referenced from required .class files
Line 8: The method stream() from the type Collection<Map.Entry<Integer,Integer>> refers to the missing type Stream
我使用的 Cassandra 版本有问题吗?我在 docker 内的本地 MAC 机器上运行 Cassandra。我尝试过使用3.11.2 和带有latest 标签的图像。
此外,UDF 功能已启用,我可以运行简单的 UDF 功能。
【问题讨论】:
标签: cassandra user-defined-functions cqlsh