推广 热搜: 行业  机械  设备    教师  经纪  系统  参数    蒸汽 

spark:商品热门品类TOP10统计(案例)

   日期:2024-11-10     移动:http://changmeillh.xhstdz.com/mobile/quote/68522.html

目录

spark:商品热门品类TOP10统计(案例)

介绍

数据准备

 代码实现


品类是指产品的分类,大型电商网站品类分多级,一般为三级分类,此次项目中品类只有一级。

不同的公司对热门的定义不一样。此次按照每个品类的  点击---->下单---->支付  的量来统计热门品类。先按照点击数排名,数量决定排名;点击数相同,比较下单数;下单数相同,比较支付数。

点击链接下载数据(免费下载) 

14万条用户行为数据,搜索、点击、下单、支付-spark文档类资源-CSDN下载

数据说明

 时间_用户ID_sessionID_页面ID_动作时间_搜索_点击(品类ID、产品ID)_下单(品类ID、产品ID)_支付(品类ID、产品ID)_城市ID

分别统计每个品类点击的次数,下单的次数和支付的次数

(品类,点击总数(品类,下单总数(品类,支付总数

import org.apache.spark.{SparkConf, SparkContext}
object TopOne {
  def main(args: Array[String]): Unit = {
    //TODO 创建环境
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("TOP")
    val sc = new SparkContext(sparkConf)
    //TODO TOP热门商品
    //读取日志文件
    val rdd = sc.textFile("datas/action.txt")
    rdd.cache()
    //统计品类点击数量
    //数据清洗
    val clickRDD = rdd.filter(
      action => {
        val datas = action.split("_")
        datas(6) != "-1"
      }
    )
    //提取点击品类和数量并统计数量
    val clickCountRDD = clickRDD.map(
      action => {
        val datas = action.split("_")
        //(品类,数量)
        (datas(6),1)
      }
    ).reduceByKey(_+_)
//    println(">>>>>>>>>")
//    clickCountRDD.collect().foreach(println)
    //统计品类下单数量
    //数据清洗
    val orderRDD = rdd.filter(
      action => {
        val datas = action.split("_")
        datas(8) != "null"
      }
    )
    //提取下单品类和数量并统计数量
    val ordercountRDD = orderRDD.flatMap(
      action => {
        val datas = action.split("_")
        val cid = datas(8)
        //(品类,数量)
        val cids = cid.split(",")
        cids.map(id => (id, 1))
      }
    ).reduceByKey(_ + _)
//    println(">>>>>>>>")
//    ordercountRDD.collect().foreach(println)
    //统计品类支付数量
    //清洗数据
    val payRDD = rdd.filter(
      action => {
        val datas = action.split("_")
        datas(10) != "null"
      }
    )
    //提取支付品类和数量并统计数量
    val paycountRDD = payRDD.flatMap(
      action => {
        val datas = action.split("_")
        val cid = datas(10)
        //(品类,数量)
        val cids = cid.split(",")
        cids.map(id => (id, 1))
      }
    ).reduceByKey(_ + _)
//    println(">>>>>>>>>>>>")
//    paycountRDD.collect().foreach(println)
    //排序————排序顺序:先点击-->再下单-->后支付
    val cogroupRDD = clickCountRDD.cogroup(ordercountRDD, paycountRDD)
    val cogroupRDD2 = cogroupRDD.mapValues {
      case (clickIter, orderIter, payIter) => {
        var clickCnt = 0
        val iter1 = clickIter.iterator
        if (iter1.hasNext) {
          clickCnt = iter1.next()
        }
        var orderCnt = 0
        val iter2 = orderIter.iterator
        if (iter2.hasNext) {
          orderCnt = iter2.next()
        }
        var payCnt = 0
        val iter3 = payIter.iterator
        if (iter3.hasNext) {
          payCnt = iter3.next()
        }
        (clickCnt, orderCnt, payCnt)
      }
    }
    val resultRDD = cogroupRDD2.sortBy(_._2, false).take(10)
    //打印
    resultRDD.foreach(println)
    //TODO 关闭环境
    sc.stop()
  }
}

 

本文地址:http://changmeillh.xhstdz.com/quote/68522.html    物流园资讯网 http://changmeillh.xhstdz.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号