使用Hadoop计算独立访客的最佳方法是什么?

2024-09-29 21:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,大家好,刚刚开始使用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流媒体

谢谢


Tags: 文件方法hadoopdate站点usernameaction用户名
3条回答

你可以做两步手术:

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

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

使用二级排序对用户id进行排序。这样,您就不需要在内存中存储任何东西——只需将数据流传送,每次看到特定站点id的值更改时,都会增加不同的计数器

这是一些documentation

我的想法和tzaman的一个小小的转变很相似

  1. 地图输出:(用户名,网站ID)=>;(“”)
  2. 减少输出:(siteid)=>;(1)
  3. 映射:标识映射器
  4. reduce:longsumreducer(简单总结)

注意,第一个reduce不需要遍历任何记录。您可以简单地检查密钥并生成输出。

高温高压

相关问题 更多 >

    热门问题