嘿,大家好,刚刚开始使用hadoop,好奇如果您的日志文件是这样的,mapreduce中计算唯一访问者的最佳方法是什么。。。
DATE siteID action username
05-05-2010 siteA pageview jim
05-05-2010 siteB pageview tom
05-05-2010 siteA pageview jim
05-05-2010 siteB pageview bob
05-05-2010 siteA pageview mike
对于每个站点,你想找出每个站点的唯一访问者吗?
我想映射程序会发出siteID用户名 而reducer将为每个键保留一组唯一的usersnames(),然后发出该组的长度。然而,这可能会在内存中存储数以百万计的用户名,这似乎是不对的。有人有更好的办法吗?
我在用python流媒体
谢谢
你可以做两步手术:
第一步,发出
(username => siteID)
,让reducer使用set
折叠siteID的多次出现-因为您通常拥有的站点比用户少得多,这应该没问题。然后在第二步中,可以发出
(siteID => username)
并进行简单的计数,因为重复项已被删除。使用二级排序对用户id进行排序。这样,您就不需要在内存中存储任何东西——只需将数据流传送,每次看到特定站点id的值更改时,都会增加不同的计数器
这是一些documentation。
我的想法和tzaman的一个小小的转变很相似
注意,第一个reduce不需要遍历任何记录。您可以简单地检查密钥并生成输出。
高温高压
相关问题 更多 >
编程相关推荐