gpt4 book ai didi

java - riak mapreduce 对 java 中响应大小的限制

转载 作者:行者123 更新时间:2023-12-01 13:03:09 25 4
gpt4 key购买 nike

我正在尝试在 Riak 1.4 上运行 mapReduce 查询,该查询按二级索引进行查询,按日期对记录进行排序,然后将结果限制为第一条记录。

我已经完成了二级索引查询。排序似乎没有做任何事情。排序没有错误,只是返回未排序的结果。返回记录数的限制会导致服务器返回“bad_json”错误。

这就是我所拥有的。假设在“cars”存储桶中查询“john_doe”拥有的最新汽车。 (为了保护无辜者,一些名字已被更改;):

JSSourceFunction dateSortFunction = new JSSourceFunction(
"function(v) {" +
"return v.sort(function(a, b) {" +
"return a.issueDate - b.issueDate ;" +
"}" +
");" +
"}");

IndexQuery iq = new BinValueQuery(BinIndex.named("person"), "cars", "john_doe");

MapReduceResult response = session.mapReduce(iq)
.addMapPhase(NamedErlangFunction.MAP_OBJECT_VALUE)
.addReducePhase(dateSortFunction)
.addReducePhase(new NamedJSFunction("Riak.reduceLimit"), 1)
.execute();

我看过很多关于排序的帖子,希望最终能弄清楚。但是,我还没有看到有关 LIMIT 函数如何工作的任何帮助。

提前致谢!

更新:感谢乔,他让我走上了正轨。这就是最终对我有用的东西。我的日期格式是 ISO 8601(例如 2011-05-18T17:00:00-07:00)。因此,我可以从词法上比较正确的排序。另外,我发现了 javascript 的数组缩短方法并更新了代码以返回最多前 5 个对象。

JSSourceFunction sortLimitFunction = new JSSourceFunction(
"function(v) {" +
"v.sort(function(a, b) {" +
"return a.issueDate < b.issueDate" +
"}" +
");" +
"if (v.length > " + "5" + ") { " +
"v.length = " + "5" + ";" +
"}" +
"return v;" +
"}");

IndexQuery iq = new BinValueQuery(BinIndex.named("person"), "cars", "john_doe");

MapReduceResult response = session.mapReduce(iq)
.addMapPhase(new NamedJSFunction("Riak.mapValuesJson"))
.addReducePhase(sortLimitFunction)
.execute();

最佳答案

对于排序,有 mailing list post涵盖了这个主题。我发现该实现与您的实现之间的主要区别是在映射阶段使用 JavaScript Riak.mapValuesJson 函数。

出于限制,如果您只想排序列表中的第一项,请尝试让排序函数仅返回第一个元素。虽然当部分结果集从各个 vnode 到达时,reduce 函数可以(并且可能)被多次调用,但合并列表中的第一个元素也必须是它起源的部分列表中的第一个元素,所以这应该给你什么您正在寻找:

JSSourceFunction dateSortFunction = new JSSourceFunction(
"function(v) {" +
"var arr = v.sort(function(a, b) {" +
"return a.issueDate - b.issueDate ;" +
"}" +
");" +
"if (arr.length == 0) { " +
"return [];" +
"} else {"
"return arr[0];" +
"}"
"}"
);

关于java - riak mapreduce 对 java 中响应大小的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23402015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com