Java 源代码编译失败 - Cassandra 函数

Java source compilation failed - Cassandra Function

我是 Cassandra 的新手,我正在尝试创建一个用户定义的聚合,但卡在了函数创建过程中。

table 中的数据是 -

count| host
-----+-----------
 102 | test_host1
 100 | test_host2
 101 | test_host2
 101 | test_host3
 104 | test_host3
 101 | test_host1
 100 | test_host3
 103 | test_host3
 102 | test_host3
 100 | test_host1

我正在编写的函数将计算我的 table 中有多少行与特定主机。如果我向聚合提供 test_host1,理想的结果将是 3.

找到下面函数的代码 -

    CREATE FUNCTION countSessions(dataMap map<text,int>,host text)  
    RETURNS NULL ON NULL INPUT  
    RETURNS map<text, int>  
    LANGUAGE java as  
    ' 
    Integer countValue = dataMap.get(host); 
    if(countValue == null) { 
    countValue = 1; 
    } else { 
    countValue++; 
    } 
    dataMap.put(host,countValue); 
    return dataMap; 
    ';

在 cqlsh 上执行此操作时,出现以下错误 -

InvalidRequest: code=2200 [Invalid query] message="Could not compile function 'visitors.countsessions' from Java source: org.apache.cassandra.exceptions.InvalidReq uestException: Java source compilation failed: Line 2: dataMap cannot be resolved Line 7: dataMap cannot be resolved Line 8: dataMap cannot be resolved to a variable "

我无法理解我的函数代码有什么问题。请帮忙。

另外,有人可以向我推荐任何 link/site(datastax 除外),我可以使用它来正确理解 UDF 和 UDA。

感谢和问候,

维巴夫

PS - 如果有人选择否决这个问题,请在评论中说明原因。

这不起作用,因为 dataMap 在初始声明中被转换为小写。你可以这样做:

CREATE FUNCTION countSessions("dataMap" map<text,int>,host text)  
RETURNS NULL ON NULL INPUT  
RETURNS map<text, int>  
LANGUAGE java as  
' 
Integer countValue = dataMap.get(host); 
if(countValue == null) { 
countValue = 1; 
} else { 
countValue++; 
} 
dataMap.put(host,countValue); 
return dataMap; 
';

CREATE FUNCTION countSessions(datamap map<text,int>,host text)  
RETURNS NULL ON NULL INPUT  
RETURNS map<text, int>  
LANGUAGE java as  
' 
Integer countValue = datamap.get(host); 
if(countValue == null) { 
countValue = 1; 
} else { 
countValue++; 
} 
datamap.put(host,countValue); 
return datamap; 
';

使这项工作成功。