spark案例:Top10 热门品类中每个品类的 Top10 活跃 Session 统计

接上一篇spark案例:Top10 热门品类

分析:top10热门已获取,就可以通过品类ID和sessionID来汇总一种品类商品同一session的操作次数,再对品类分区排序

思路想好直接上代码:

// 获取到top10的品类ID
        val cid: List[String] = values.map(_.cid)

        // 过滤数据(只留下top10)
        val filterRDD: RDD[String] = rdd.filter(
            line => {
                val strings: Array[String] = line.split("_")
                if (strings(6) != "-1") {
                    cid.contains(strings(6))
                } else {
                    false
                }
            }
        )

        // 将数据转换为((cid,session),1)再进行聚合,聚合后进行转化为(cid,(session,sum))来按cid分组按sum排序取top10
        filterRDD.map(
            line => {
                val strings: Array[String] = line.split("_")
                ((strings(6),strings(2)),1)
            }
        ).reduceByKey(_+_).map {
            case  (k, v) => {
                ((k._1), (k._2, v))
            }
        }.groupByKey().mapValues(
            iter => {
                iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(10)
            }
        ).foreach(println)

这块是只针对这一需求的代码

(Ordering.Int.reverse)实现倒序

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值