使用Map Reduce计算唯一登录

时间:2012-04-08 17:39:31

标签: mapreduce

假设我有一个非常大的日志文件,具有这种格式(基于用户登录的位置)

UserId1 , New York
UserId1 , New Jersey
UserId2 , Oklahoma
UserId3 , Washington DC
....
userId999999999, London

请注意,UserId1首先登录纽约,然后飞往新泽西并再次从那里登录。

如果我需要获得多少唯一用户登录(意味着2登录将同一用户ID视为1次登录),我应该如何映射和减少它?

我最初的计划是我想先将它映射到这种格式:

UserId1, 1
UserId1, 1
UserId2, 1
UserId3, 1

然后将其缩小为

UserId1, 2
UserId2, 1
UserId3, 1

但是这会导致输出数量仍然很大(特别是如果用户的常见行为是每天登录1或2次)。或者有更好的方法来实现它吗?

2 个答案:

答案 0 :(得分:0)

我建议在地图阶段使用自定义键。您可以参考教程here进行编写和使用自定义键。自定义键应该有两个部分1)userid 2)placeid。所以基本上在映射器阶段你正在这样做。

emit(<userid, place>, 1)

在缩减阶段,您只需要访问密钥并分别发出密钥的两个部分。

答案 1 :(得分:0)

执行map-reduce。

例如,您有10000行数据,但是一次只能处理1000行数据。

然后,处理1000行数据10次。

如果10个处理结果的行总和> 1000:

再次执行上述步骤。

其他:

直接使用设置。

相关问题