Cassandra NoSQL 中的 Sqrt 和 Pow(最近邻)

Sqrt and Pow in Cassandra NoSQL (Nearest neighbor)

有什么方法可以在 Cassandra NoSQL 中使用这个数学函数吗?我在寻找给定纬度和经度的最近行的方法时找到了下面的函数。

SELECT latitude, longitude, sqrt(
    pow(69.1 * (latitude - [startlat]), 2) +
    pow(69.1 * ([startlng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 25 ORDER BY distance;

CQL 中没有内置数学函数,但 Cassandra 2.2 中有一个名为用户定义函数的新功能,它允许您创建数学函数。我不确定您是否可以使用数学运算的结果来限制返回的行。

这是一个例子:

cqlsh> CREATE OR REPLACE FUNCTION fLog (input double) CALLED ON NULL INPUT RETURNS double LANGUAGE java AS 'return Double.valueOf(Math.log(input.doubleValue()));';

查看更多详情here

可能更常见的方法是在 CQL 之外执行 map/reduce 类型的操作以将行映射到距离并将其减少到小于 25 的距离。这可以使用 Spark 完成或以编程方式使用 Cassandra java 客户端等