cassandra udf with java在使用流时抛出错误

pxiryf3j  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(327)

我想写一本书 UDF in Cassandra 使用java。我有两个一对一Map的整数列表,即第一个列表中的第一项对应于第二个列表中的第一项。这就是我的数据如何存储在cassandra表中的两列列表类型下。我的自定义项

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 标签。此外,自定义项功能已启用,我可以运行简单的自定义项功能。

c6ubokkw

c6ubokkw1#

只能使用在cassandra内部的允许类列表中显式定义的类,而不能使用在定义的不允许列表中显式定义的类。如果您查看cassandra3.11.2的源代码,您可以看到 java.utils.stream 在不允许列表中,因此不能在udf/uda中使用它。

相关问题