Java 的 Cassandra UDF 在使用流时抛出错误

Cassandra UDF with Java throwing error on usage of stream

我正在尝试使用 Java 编写 UDF in Cassandra。 我有两个具有一对一映射的整数列表,即第一个列表中的第一项对应于第二个列表中的第一项。这就是我的数据在两列列表类型下存储在 Cassandra table 中的方式。 我的 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 中允许的 类 列表中明确定义的 类,而不能使用定义的禁止列表中的 类。如果您查看 Cassandra 3.11.2 的源代码,you can see that java.utils.stream is in the disallowed list,那么您不能在 UDF/UDA.

中使用它