我想写一本书 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
标签。此外,自定义项功能已启用,我可以运行简单的自定义项功能。
1条答案
按热度按时间c6ubokkw1#
只能使用在cassandra内部的允许类列表中显式定义的类,而不能使用在定义的不允许列表中显式定义的类。如果您查看cassandra3.11.2的源代码,您可以看到
java.utils.stream
在不允许列表中,因此不能在udf/uda中使用它。