Spark十个热门类

import org.apache.spark.{SparkConf, SparkContext}

object Test1 {

  //Top10热门品类
  def main(args: Array[String]): Unit = {

    val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))
    //1、读取数据
    val rdd1 = sc.textFile("datas/user_visit_action.txt")

    //3、统计每个品类点击次数
    //3.1、过滤点击数据
    val clickRdd = rdd1.filter(line=>{
      val arr = line.split("_")
      arr(6)!="-1"
    })
    //3.2、切割
    val clickSplitRdd = clickRdd.map(line=>{
      val arr = line.split("_")
      (arr(6),1)
    })
    //3.3、分组聚合
    val clickNumRdd = clickSplitRdd.reduceByKey(_+_)
    //List( (1,10),(5,30))
    //4、统计每个品类下单次数
    //4.1、过滤下单数据
    val orderRDD = rdd1.filter(line=>{
      val arr = line.split("_")
      arr(8)!="null"
    })

    //4.2、切割
    val orderSplitRdd = orderRDD.flatMap(line=>{
      val arr = line.split("_")
      val ids = arr(8)
      ids.split(",").map(id=> (id,1))
    })
    //4.3、统计下单次数
    val orderNumRdd = orderSplitRdd.reduceByKey(_+_)
    //RDD[ (1,15),(5,5)]
    //5、统计每个品类支付次数
    //5.1、过滤支付数据
    val payRdd = rdd1.filter(line=>{
      val arr = line.split("_")
      arr(10)!="null"
    })
    //5.2、切割
    val paySplitRdd = payRdd.flatMap(line=>{
      val arr = line.split("_")
      val ids = arr(10)
      ids.split(",").map(id=>(id,1))
    })
    //5.3、统计支付次数
    val payNumRdd = paySplitRdd.reduceByKey(_+_)
    //RDD[ (1,2),(5,3)]

    //6、join得到每个品类的点击、支付、下单次数
    val totalRdd = clickNumRdd.leftOuterJoin(orderNumRdd).leftOuterJoin(payNumRdd)

    val totalNumRdd = totalRdd.map{
      case (id,((clickNum,orderNum),payNum)) => (id,clickNum,orderNum.getOrElse(0),payNum.getOrElse(0))
    }
    //7、排序取前十
    totalNumRdd.sortBy({
      case (id,clickNum,orderNum,payNum) => (clickNum,orderNum,payNum)
    },false)
    //8、结果展示
      .collect().take(10).foreach(println(_))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值