我正在尝试计算我的java appengine应用程序每天的唯一身份用户数。我已决定使用mapreduce框架(mapreduce.appspot.com)进行java appengine离线执行此计算。我已经设法创建了一个map reduce工作,它遍历我所有代表单个用户会话事件的实体。我也可以使用一个简单的计数器。我有几个问题:
1)我如何才为每个用户ID增加一次计数器?我目前正在映射包含用户ID属性的实体,但其中许多实体可能包含相同的用户ID,那么我该如何只计算一次呢?
2)一旦我将这些作业的结果存储在这些计数器中 - 我如何将它们保存到数据存储区?我在mapreduce的状态页面上看到了计数器的结果,但我希望这些结果自动保存到数据存储区。
想法?
答案 0 :(得分:1)
我还没有实际使用过MapReduce功能,但我的理解是你可以在mapper中向数据存储区写东西。您可以创建一个名为UniqueCount的实体类型,并在每次映射器看到以前没有看到的ID时插入一个实体。那么你可以计算你有多少独特的ID。实际上,每次找到新的唯一实体时,您都可以更新计数器。您可能需要谷歌“分片计数器”,以获取有关在数据存储区中创建可以处理高吞吐量的计数器的提示。
最终,当他们完成Reduce功能时,我想这整个任务将变得非常简单。