uv计算的方式,有好几种处理方式,粗略计算的方式有 ip, 或者服务器下发一个 id,如百度用的好像是 bduss或者baiduid之类的 但是要计算手机的用户的uv好像比pc上面复杂一点,这得感谢很多山寨厂商,并且各种平台,还有用户权限很多因素。 如 android有的版本
uv计算的方式,有好几种处理方式,粗略计算的方式有 ip, 或者服务器下发一个 id,如百度用的好像是 bduss或者baiduid之类的
但是要计算手机的用户的uv好像比pc上面复杂一点,这得感谢很多山寨厂商,并且各种平台,还有用户权限很多因素。
如 android有的版本如果要获取用户的 mac或者imei之类的,必须用户授权,ios平台的mac和openudid之类的,也会有这种情况
计算uv的标准,分平台,android是用mac+imei,而ios是用 mac+openudid。
以android平台分例,会存在如下四种情况
| mac | imei |
| a | 1 |
| 1 | |
| a | |
| b | 2 |
| c | |
| 3 | |
| d | 4 |
从上面的例子可以看出存在如下几种情况
1. 有mac 并且有imei
2. 有mac, 无imei
3. 无mac, 有imei
4. 无mac,无imei
计算uv的方法很简单,基本思路如下
1. 先找出有mac并且有imei的做为集合a
2. 找出mac非空的集合标记为b
3. 找出mac为空的集合标记为c
4. 用b left join a by mac得到集合d
5. filter d by imei is null得到集合e
6. 用c left join a by imei 得到集合f
7. filter f by mac is null 得到集合g
8. uniqueset = union g, e, a
按照上面的计算步骤,用pig实现如下
a = filter uvset by (mac is not null) and (imei is not null); b = filter uvset by (mac is not null); c = filter uvset by (mac is null); d = join b by mac left outer, a by mac; e = filter d by (a::mac is null); e1 = foreach e generate b::mac as mac, b::imei as imei; f = join c by imei left outer, a by imei; g = filter f by (a::imei is null); g1 = foreach g generate g::mac as mac, g::imei as imei; uniqueset = union g1, e1, a; tmpset = group uniqueset all; outres = foreach tmpset generate count(uniqueset); dump outres;【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!