分组topn的几种算法
简单方式
1、用户少或者用户记录少
1)、根据uid分组,组内元素如果少的话就加载到内存 然后orderby me,ts desc
2)、根据uid分组,如果用户少的话就把所有的用户都distinct出来然后,遍历用户,每次都filter出来,然后调用rdd的orderby(spark)
2、用户多,用户记录也多,上边两种都不是适合
1)、重写分区器(根据uid分区)和排序方法,相同分区内的元素取前n条
2)、重写分区器 如果用户过多 会导致分区很多 也不是很完美
3 、绝招 sparksql---->row_number() over()