-
案例1
答案:
https://www.bilibili.com/video/BV11A411L7CK?p=78
-
案例2
需求1:Top10热门品类
根据点击数、下单数、支付数来排名
思路:每一条数据可能是点击/搜索/下单/支付的行为,因此可以跟wordcount一样对其进行map,然后reduceByKey,最后排序,取前10名。这样的思路出来的点击数、下单数、支付数是独立的,我们需要得到一个包含这三者的元组,然后进行元组排序(先排序第一个,后排第二个...)。可能需要用join、zip、leftOuterJoin、Cogroup。
join:在有点击数,没有下单数量的时候,整条记录都没了。
zip:跟位置有关系,没ID没关系,无法直接拼接。
leftOuterJoin:以左边的为主,
cogroup:为空的时候也有,可以!
步骤:cogroup、mapValues取出值cogroup之后的迭代器、排序、取前10个。
优化:cogroup需要shuffle,性能有问题。
我们可以采用下面的计算方式,也就是map、union、reduceByKey代替
需求2:

步骤:
1、取出前面计算出来的Top10品类
2、过滤前10品类的点击数据
3、map成((品类ID,sessionId),1),reduceByKey
4、map结构转化((品类ID,sessionId),sum)->(品类ID,(sessionId,sum))
5、groupByKey
6、分组排序并取前10

需求3:

1、根据用户sessionid分组,排序,取出页面

2、计算分母,也就是到过哪些页面

3、计算分子
聚合跳转个数

4、分子除以对应的分母

网友评论