我们正在与Aerospike运行一个小POC,以了解我们是否可以运行LUA脚本来做一些事情。
在这种情况下,我们使用了航班示例: https://github.com/aerospike/flights-analytics
我在飞行时间上创建了一个新索引,以便通过它进行搜索。
脚本遍历所有记录并查找航班的最后到达时间。 为简单起见,我们只插入了飞往Bufalo的航班。
local function aggregatCityToMax(result, record)
city = string.upper(record['DEST_CITY_NAME'])
flightTime = record['ARR_TIME']
if result[city] == nil then
info("CITY: |%s| | DATE: %d | MAX: null" , city, flightTime)
result[city] = flightTime
else
info("CITY: |%s| | DATE: %d | MAX: %d" , city, flightTime,
result[city])
if result[city] < flightTime then
info("new MAX %s", flightTime)
result[city] = flightTime
end
end
return result
end
local function reduce_values(a, b)
return map.merge(a, b, mergeFunction)
end
local function mergeFunction(a, b)
info("merging: %s VS %s ", a, b)
if a < b then
return b
end
return a
end
function mapMax(stream)
return stream : aggregate(map(), aggregatCityToMax) : reduce(reduce_values)
end
日志显示奇怪的结果: 我没有达到最高限度。 2.看起来每10条记录,最大值重置为空。
LOG:
CITY:| BUFFALO | |日期:1253 | MAX:null 城市:|水牛城| |日期:1221 | MAX:1253 城市:|水牛城| |日期:1600 | MAX:1253 城市:|水牛城| |日期:1203 |最高:1600 城市:|水牛城| |日期:1424 |最高:1600 城市:|水牛城| |日期:2141 |最高:1600 城市:|水牛城| |日期:1821年| MAX:2141 城市:|水牛城| |日期:1221 | MAX:2141 城市:|水牛城| |日期:1424 | MAX:2141 城市:|水牛城| |日期:1550 | MAX:2141 城市:|水牛城| |日期:1703 | MAX: null
CITY:| BUFFALO | |日期:2312 | MAX:1703 城市:|水牛城| |日期:2251 | MAX:2312 城市:|水牛城| |日期:19 | MAX:2312 城市:|水牛城| |日期:1030 | MAX:2312 城市:|水牛城| |日期:1257 | MAX:2312 城市:|水牛城| |日期:803 | MAX:2312 城市:|水牛城| |日期:19 | MAX:2312 城市:|水牛城| |日期:1502 | MAX:2312 城市:|水牛城| |日期:2319 | MAX:2312 城市:|水牛城| |日期:1735 | MAX: null 城市:|水牛城| |日期:1221 | MAX:1735 城市:|水牛城| |日期:1258 | MAX:1735 城市:|水牛城| |日期:2125 | MAX:1735 城市:|水牛城| |日期:2251 | MAX:2125 城市:|水牛城| |日期:1104 | MAX:2251 城市:|水牛城| |日期:2053 | MAX:2251 城市:|水牛城| |日期:1340 | MAX:2251 城市:|水牛城| |日期:2312 | MAX:2251 城市:|水牛城| |日期:2226 | MAX:2312 城市:|水牛城| |日期:2053 | MAX: null 城市:|水牛城| |日期:1637 | MAX:2053 城市:|水牛城| |日期:1030 | MAX:2053 城市:|水牛城| |日期:1618 | MAX:2053 城市:|水牛城| |日期:1510 | MAX:2053 城市:|水牛城| |日期:1510 | MAX:2053 城市:|水牛城| |日期:2346 | MAX:2053 城市:|水牛城| |日期:2343 | MAX:2346 城市:|水牛城| |日期:1600 | MAX:2346 城市:|水牛城| |日期:1550 | MAX:2346 城市:|水牛城| |日期:1949年| MAX: null 城市:|水牛城| |日期:1104 | MAX:1949 城市:|水牛城| |日期:2045 | MAX:1949 城市:|水牛城| |日期:2213 | MAX:2045
我做错了什么吗? 我错过了什么吗?
谢谢,
Idob
答案 0 :(得分:2)
Aerospike的聚合更多是流媒体。即它不断推出部分结果,以免出现停滞。在客户端发生的减少将完成合并所有部分结果的最终工作。与hadoop map-reduce相比,这是一个不同的模型,其中reduce / final将等待所有局部减少到完全开始之前完成。 Aerospike的流媒体模型有一个优点。
您在聚合函数中有一个print语句。推出部分结果后,种子映射将在下一批处理时开始为空。你的逻辑没有错。最终结果应该没问题。您是否看到了最终结果的任何问题?