使用Hadoop统计独特访客的最佳方式是什么?

Jam*_*mes 9 python hadoop mapreduce

嘿所有,刚刚开始使用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
Run Code Online (Sandbox Code Playgroud)

对于每个网站,您想要找出每个网站的唯一身份访问者?

我以为mapper会发出siteID\t用户名,reducer会为每个键保留一个唯一用户名的set(),然后发出该组的长度.然而,这可能会在内存中存储数百万个用户名,这似乎并不正确.谁有更好的方法?

我顺便使用python流

谢谢

tza*_*man 3

您可以将其作为两阶段操作来完成:

第一步,发出(username => siteID),并让reducer使用a折叠多次出现的siteID set- 因为您的站点通常比用户少得多,所以这应该没问题。

然后在第二步中,您可以发出(siteID => username)并进行简单的计数,因为重复项已被删除。