basho / riak (http://riak.basho.com/)

Riak is a decentralized datastore from Basho Technologies.

Clone this repository (size: 12.5 MB): HTTPS / SSH
$ hg clone http://hg.basho.com/riak
commit 817: 6aaf460339c4
parent 816: d7b8ee8ab5b2
branch: default
Adding my updates to js-mapreduce.org detailing named functions and pre-defined built ins
Kevi...@basho.com
7 months ago
riak / apps / riak / priv / mapred_builtins.js
r817:6aaf460339c4 62 loc 1.5 KB embed / history / annotate / raw /
var Riak = function() {

  return {
    getClassName: function(obj) {
      if (obj && obj.constructor && obj.constructor.toString) {
        var arr = obj.constructor.toString().match(/function\s*(\w+)/);
        if (arr && arr.length == 2) {
	  return arr[1];
        }
      }
      return undefined;
    },
    mapValues: function(value, keyData, arg) {
      var data = value["values"][0]["data"];
      if (Riak.getClassName(data) !== "Array") {
	return [data];
      }
      else {
	return data;
      }},
     mapValuesJson: function(value, keyData, arg) {
      var newValues = Riak.mapValues(value, keyData, arg);
      return newValues.map(function(nv) { return JSON.parse(nv); });
    },
    reduceSum: function(values, arg) {
      return [values.reduce(function(prev, curr, index, array) { return prev + curr; })];
    },
    reduceMin: function(values, arg) {
      values.sort();
      return [values[0]];
    },
    reduceMax: function(values, arg) {
      values.sort().reverse();
      return [values[0]];
    },
    reduceSort: function(value, arg) {
      var c = null;
      if (arg) {
	c = eval(arg);
      }
      if(c) {
	return value.sort(c);
      }
      else {
	return value.sort();
      }
    },
    reduceLimit: function(value, arg) {
      return value.slice(0, arg - 1);
    },
    reduceSlice: function(value, arg) {
      var start = arg[0];
      var end = arg[1];
      if (end > value.length) {
	return value;
      }
      else {
	return value.slice(start, end);
      }
    }
  }
}();