SparkCore之电商用户行为数据分析项目实战

本文通过SparkCore分析电商用户行为,包括Top10热门品类、热门品类中每个品类的Top10活跃Session及页面单跳转化率的统计。数据集包含搜索、点击、下单和支付四种行为,通过需求分析和代码实现,展示数据处理过程。
摘要由CSDN通过智能技术生成

1. 数据准备

  • 本项目的数据是采集电商网站的用户行为数据,主要包含用户的4种行为:搜索、点击、下单和支付

1)数据集

SparkCore项目实战中用到的数据集

2)数据格式说明

在这里插入图片描述
(1)数据采用 _ 分割字段;
(2)每一行表示用户的一个行为,所以每一行只能是四种行为中的一种;
(3)如果搜索关键字是null,表示这次不是搜索;
(4)如果点击的品类id和产品id是-1,表示这次不是点击;
(5)下单行为来说一次可以下单多个产品,所以品类id和产品id都是多个,id之间使用 ,(逗号)分割;如果本次不是下单行为,则他们相关数据用null来表示;
(6)支付行为和下单行为类似。

3)数据详细字段说明

在这里插入图片描述

2. 需求一:Top10热门品类

1)需求说明

  • 品类是指产品的分类,大型电商网站品类分多级,咱们的项目中品类只有一级,不同的公司可能对热门的定义不一样。我们按照每个品类的点击、下单、支付的量来统计热门品类。
    在这里插入图片描述
  • 例如,综合排名 = 点击数 * 20% + 下单数 * 30% + 支付数 * 50%
  • 本项目需求优化为:先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。

2)需求分析

在这里插入图片描述

3)代码实现

  • 思路:分别统计每个品类点击的次数,下单的次数和支付的次数。
import org.apache.spark.rdd.RDD
import org.apache.spark.{
   SparkConf, SparkContext}
import scala.collection.mutable.ListBuffer


object Spark01_TopN_req1 {
   
  def main(args: Array[String]): Unit = {
   
    //创建SparkConf并设置App名称
    val conf: SparkConf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]")

    //创建SparkContext,该对象是提交Spark App的入口
    val sc: SparkContext = new SparkContext(conf)

    //1.读取数据,创建RDD
    val dataRDD: RDD[String] = sc.textFile("D:\MyWork\IdeaProjects\spark0105_exer\src\main\input\user_visit_action.txt")

    //2.将读到的数据进行切分,并且将切分的内容封装为UserVisitAction对象
    val actionRDD: RDD[UserVisitAction] = dataRDD.map {
   
      line => {
   
        val fields: Array[String] = line.split("_")
        UserVisitAction(
          fields(0),
          fields(1).toLong,
          fields(2),
          fields(3).toLong,
          fields(4),
          fields(5),
          fields(6).toLong,
          fields(7).toLong,
          fields(8),
          fields(9),
          fields(10),
          fields(11),
          fields(12).toLong
        )
      }
    }

    //3.判断当前这条日志记录的是什么行为,并且封装为结果对象    (品类,点击数,下单数,支付数)==>例如:如果是鞋的点击行为  (鞋,1,0,0)
    //(鞋,1,0,0)
    //(保健品,1,0,0)
    //(鞋,0,1,0)
    //(保健品,0,1,0)
    //(鞋,0,0,1)=====>(鞋,1,1,1)
    val infoRDD: RDD[CategoryCountInfo] = actionRDD.flatMap {
   
      userAction => {
   
        //判断是否为点击行为
        if (userAction.click_category_id != -1) {
   
          //封装输出结果对象
          List(CategoryCountInfo(userAction.click_category_id + "", 1, 0, 0))
        } else if (userAction.order_category_ids != "null") {
   
          //坑:读取的文件应该是null字符串,而不是null对象
          //判断是否为下单行为,如果是下单行为,需要对当前订单中涉及的所有品类Id进行切分
          val ids: Array[String] = userAction.order_category_ids.split(",")
          //定义一个集合,用于存放多个品类id封装的输出结果对象
          val categoryCountInfoList: ListBuffer[CategoryCountInfo] = ListBuffer[CategoryCountInfo]()
          //对所有品类的id进行遍历
          for (id <- ids) {
   
            categoryCountInfoList.append(CategoryCountInfo(id, 0, 1, 0))
          }
          categoryCountInfoList
        } else if (userAction.pay_category_ids != "null") {
   
          //支付
          val ids: Array[String] = userAction.pay_category_ids.split(",")
          //定义一个集合,用于存放多个品类id封装的输出结果对象
          val categoryCountInfoList: ListBuffer[CategoryCountInfo] = ListBuffer[CategoryCountInfo]()
          //对所有品类的id进行遍历
          for (id <- ids) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值