完成他们的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
函数中需要做的工作,还是这大致是正确的想法?
我最初编写了这个挑战!除非你想让我给你答案,否则我会给你这个提示:这里的关键是从聚合函数的角度来思考。您需要如何对条目进行分组,以找到每个月的最大值,然后找到整个数据集的最大值?
此外,从给定的数据中,你无法知道当天兑换的确切金额,但你可以通过将平均价格乘以股票交易量来进行猜测。