我有一個4個riak節點加載數據的集羣。我正在嘗試執行一個簡單的MapReduce作業,但是我試圖通過提供自己的javascript函數(爲了移動到更多涉及MapReduce作業)來完成作業。Riak MapReduce Javascript奇怪的輸出
我相關的Java代碼是:
IndexQuery iq = new IntRangeQuery(IntIndex.named(indexId), bucketId, 11, 40);
Function mapfunc = new JSSourceFunction(
streamToString(MapReduceDriver.class.getResourceAsStream("/map_1.js")));
Function redfunc = new JSSourceFunction(
streamToString(MapReduceDriver.class.getResourceAsStream("/reduce_1.js")));
PBMapReduceResult result = (PBMapReduceResult) riakClient.mapReduce(iq)
.addMapPhase(mapfunc)
.addReducePhase(redfunc)
.execute();
當兩個JavaScript功能是:
function map_keepAttr(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
return [ data.Attribute_17 ];
}
function reduce_aggregate(values, arg) {
return [values.length];
}
我看到的問題是:有是所生產的正是30個值我查詢和地圖階段。但減少階段報告3而不是30(因此不能正確計數)。更奇怪的是,當我使用以下reduce函數時:我得到了預期的結果,即包含正好30個條目的json數組。
任何幫助都會救我,因爲我似乎沒有得到Riak中的MapReduce如何工作。
謝謝!
你發現問題到底是什麼!一旦我添加了重新減少的邏輯(即佔了不同的格式),一切都像魅力一樣工作!謝謝! – gpol