riak:在一次basho MapReduce挑战中被难住了



完成他们的MapReduce教程,Basho在这里提出了一个MR挑战,给出了GOOG股票行情的每日股票数据:

找到每个月交易美元数最多的一天,以及随后是最大的一天提示:您至少需要map和reduce阶段各一个。

goog存储桶中的每一天都有一个与其数据相对应的密钥,以及如下所示的相应数据:

"2010-04-21":{
Date: "2010-04-21",
Open: "556.46",
High: "560.25",
Low: "552.16",
Close: "554.30",
Volume: "2391500",
Adj Close: "554.30"
}

由于我对MR范式(坦率地说,对Javascript)相对缺乏熟悉,我想研究如何做到这一点。我假设这里的大部分工作实际上都是在reduce函数中完成的,并且您想要一个map函数,它看起来像:

function(value, keyData, arg){
var data = Riak.mapValuesJson(value)[0];  
var obj = {};
obj[data.Date] = Math.abs(data.Open - data.Close);
return [ obj ];
}

这会给你一份清单,如果不是每天交易的美元,至少是每天股价的变化。

然后我会遇到的问题是,如何构建一个reduce函数,该函数能够按月解析,每月只选择最大的值,然后从最大的月份到最小的月份对所有内容进行排序。

我是在这里少做了map函数中需要做的工作,还是这大致是正确的想法?

我最初编写了这个挑战!除非你想让我给你答案,否则我会给你这个提示:这里的关键是从聚合函数的角度来思考。您需要如何对条目进行分组,以找到每个月的最大值,然后找到整个数据集的最大值?

此外,从给定的数据中,你无法知道当天兑换的确切金额,但你可以通过将平均价格乘以股票交易量来进行猜测。

最新更新