我是映射reduce概念的新手,不知道使用它是否可以解决以下问题。
我们有一个数据日志,格式如下:
TransID Date Operation DocumentID User
1 01/01/2010 Open aaa Anne
2 01/11/2010 Close aaa Anne
3 01/12/2010 Open bbb Mary
4 01/12/2010 Close bbb Mary
我们希望能够计算不同的时间度量,例如:
- 全球平均打开和关闭操作之间的时间间隔是多少?或
- 每个用户打开和关闭的平均时间间隔是多少
有没有一种简单的方法可以通过map reduce实现这一点?我们正在考虑MongoDB或Hadoop。
数据量可能很大——数十亿条记录。谢谢
这里的技巧是,您需要在映射阶段"压平"数据,并将其发送到reducer进行计算。因此,您的键将是DocumentID(根据您的用例,可能还有User),然后值是时间和操作(如果这样排序更好,请将时间放在第一位)。在您的reducer中,上面的行只会导致行能够在键内循环。这是一个非常相似的例子https://allthingshadoop.com/2011/12/16/simple-hadoop-streaming-tutorial-using-joins-and-keys-with-python/