On 30 Aug 2009, at 11:36, Francisco Viramontes wrote:

Hi list!

I hava a question about grouping and the reduce function

If aI want to average the sum of manu values returned by my map function on a large database (~100000 rows ) the reduce function gets called with the rereduce boolean

The thing is a am not sure if its mathematically correct to average sets of floats in groups as optimized by couch where I can have to average smaller sets of previously averaged values. I certainly dont get the exact same result of averaging a whole set than a grouped set.

My question is how can I handle my reduce function to reduce a whole set and not in groups?

Note the emit call is done with complex keys:

map:

function(doc) {
if ((doc['couchrest-type'] == 'RawData') && doc ['device_variable_id']) {
        date =  new Date(doc.date_time);
emit([doc.device_variable_id, date.getFullYear(), date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), parseInt(date.getUTCMinutes() / 20 + 1) ], doc.value);
      }
    }

reduce:

function( keys, values, rereduce ) {
    if(rereduce){
              log("rereduce");
            }
      return sum( values ) / values.length ;
    }

You cannot ignore the call where rereduce is true. See 
http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/reduce.js?revision=804727&content-type=text%2Fplain

scroll down a little:

"  var reduceCombine = function (keys, values, rereduce) { "

for an example.

Reply via email to