文章目录

  • 数据说明
  • 需求1:Top10热门品类
    • 1.1 需求说明
    • 1.2 实现方案一

数据说明

//用户访问动作表
case class UserVisitAction(date: String,//用户点击行为的日期user_id: Long,//用户的IDsession_id: String,//Session的IDpage_id: Long,//某个页面的IDaction_time: String,//动作的时间点search_keyword: String,//用户搜索的关键词click_category_id: Long,//某一个商品品类的IDclick_product_id: Long,//某一个商品的IDorder_category_ids: String,//一次订单中所有品类的ID集合order_product_ids: String,//一次订单中所有商品的ID集合pay_category_ids: String,//一次支付中所有品类的ID集合pay_product_ids: String,//一次支付中所有商品的ID集合city_id: Long
)//城市 id

需求1:Top10热门品类

1.1 需求说明

品类是指产品的分类,大型电商网站品类分多级,咱们的项目中品类只有一级,不同的公司可能对热门的定义不一样。我们按照每个品类的点击、下单、支付的量来统计热门品类。

鞋 点击数 下单数 支付数
衣服 点击数 下单数 支付数
电脑 点击数 下单数 支付数

例如,综合排名 = 点击数20%+下单数30%+支付数*50%
本项目需求优化为:
先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。

bean

package object bean {//用户访问动作表case class UserVisitAction(date: String,//用户点击行为的日期user_id: String,//用户的IDsession_id: String,//Session的IDpage_id: String,//某个页面的IDaction_time: String,//动作的时间点search_keyword: String,//用户搜索的关键词click_category_id: String,//某一个商品品类的IDclick_product_id: String,//某一个商品的IDorder_category_ids: String,//一次订单中所有品类的ID集合order_product_ids: String,//一次订单中所有商品的ID集合pay_category_ids: String,//一次支付中所有品类的ID集合pay_product_ids: String,//一次支付中所有商品的ID集合city_id: String //城市 id)
}

HotCategoryTOP10ApplicationReview

import com.atguigu.core.hotcategorytop10review.controller.HotCategoryTop10ControllerReview
import com.atguigu.summer.framework.core.TApplicationobject HotCategoryTOP10ApplicationReview  extends App with   TApplication{start("Spark"){val hotCategoryTop10ControllerReview = new HotCategoryTop10ControllerReviewhotCategoryTop10ControllerReview.execute()}}

HotCategoryTop10ControllerReview

import com.atguigu.core.hotcategorytop10review.service.HotCategoryTop10ServiceReview
import com.atguigu.summer.framework.core.TControllerclass HotCategoryTop10ControllerReview extends  TController{private val hotCategoryTop10ServiceReview = new HotCategoryTop10ServiceReviewoverride def execute(): Unit = {val result: Array[(String, (Int, Int, Int))] = hotCategoryTop10ServiceReview.analysis()result.foreach(println)}
}

HotCategoryTop10DAOReview

import com.atguigu.core.hotcategorytop10review.bean.UserVisitAction
import com.atguigu.summer.framework.core.TDAO
import org.apache.spark.rdd.RDD/*** @Description  资源连接层* ** @author lianzhipeng* @create 2020-06-11 0:38:25*/
class HotCategoryTop10DAOReview extends TDAO {def getUserVisitAction() = {// 读取路径下的数据val fileRDD: RDD[String] = readFile("input/user_visit_action.txt")// 将数据封装对象fileRDD.map(data => {val datasArray: Array[String] = data.split("_")UserVisitAction(datasArray(0),datasArray(1),datasArray(2),datasArray(3),datasArray(4),datasArray(5),datasArray(6),datasArray(7),datasArray(8),datasArray(9),datasArray(10),datasArray(11),datasArray(12))})}
}

HotCategoryTop10ServiceReview

import java.ioimport com.atguigu.core.hotcategorytop10review.bean
import com.atguigu.core.hotcategorytop10review.dao.HotCategoryTop10DAOReview
import com.atguigu.summer.framework.core.TService
import org.apache.spark.rdd.RDD/*** @Description  计算逻辑层*** @author lianzhipeng* @create 2020-06-11 0:37:41*/
class HotCategoryTop10ServiceReview  extends  TService{private val hotCategoryTop10DAOReview = new HotCategoryTop10DAOReviewoverride def analysis() = {// 获取数据,数据已经被封装成一个一个的对象val UserRDD: RDD[bean.UserVisitAction] = hotCategoryTop10DAOReview.getUserVisitAction()//1. 数据进行切分,根据每条数据是哪种行为,将数据转换为://   (品类,(1,0,0)) : 点击行为//   (品类,(0,1,0)) : 下单行为//   (品类,(0,0,1)) : 支付行为val cagegoryToOneRDD: RDD[(String, (Int, Int, Int))] = UserRDD.flatMap(UserBean => {if (UserBean.click_category_id != "-1") {List((UserBean.click_category_id, (1, 0, 0)))} else if (UserBean.order_category_ids != "null") {val ids: Array[String] = UserBean.order_category_ids.split(",")ids.map(id => (id, (0, 1, 0)))} else if (UserBean.pay_category_ids != "null") {val ids: Array[String] = UserBean.pay_category_ids.split(",")ids.map(id => (id, (0, 0, 1)))} else {Nil}})//2. 按照品类进行分组聚合://   品类,(clickCount,orderCont,payCount)val categorySumRDD: RDD[(String, (Int, Int, Int))] = cagegoryToOneRDD.reduceByKey {case ((click, order, pay), (click1, order1, pay1)) => {(click + click1, order + order1, pay + pay1)}}//3. 排序取前10val result: Array[(String, (Int, Int, Int))] = categorySumRDD.sortBy(_._2,false).take(10)result}override def analysis(data: Any): Any = ???
}

1.2 实现方案一

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

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

Spark入门项目Top10相关推荐

  1. 【Spark入门项目】关键词统计

    项目描述 统计txt文件中出现频率前10的关键词,内如如下 实现流程 初始化spark配置 通过textFile方法读取txt文件 通过flatMap将RDD中的每一个元素调用split方法分词,sp ...

  2. 9月机器学习开源项目Top10

    作者 | Mybridge 译者 | 王天宇 整理 | Jane 出品 | AI科技大本营 [导读]我们从过去一个月近 250 个有关机器学习的开源项目中,精心挑选出了最热门的 10 个.在挑选过程中 ...

  3. Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.SparkSQL的发展历程 1.1 Hive and Shark SparkSQL的前身 ...

  4. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.Spark Streaming简介 1.1 概述 Spark Streaming 是Sp ...

  5. Spark入门实战系列--6.SparkSQL(下)--Spark实战应用

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.运行环境说明 1.1 硬软件环境 l  主机操作系统:Windows 64位,双核4线程 ...

  6. 数据分析从零到精通第二课 Hive和Spark入门

    03 离线利器:大数据离线处理工具 Hive 的常用技巧 今天为你介绍数据分析师最常用的数据处理工具 Hive 的一些使用技巧.这些技巧我们在工作中使用得比较频繁,如果运用得当,将为我们省去不少时间精 ...

  7. Spark 入门简介

    1. 简介 Spark 的身世 Spark 是一个通用的并行计算框架,由加州伯克利大学(UC Berkeley)的 AMP 实验室开发于 2009 年,并于 2010 年开源,2013 年成长为 Ap ...

  8. spark系列3:spark入门编程与介绍

    3. Spark 入门 目标 通过理解 Spark 小案例, 来理解 Spark 应用 理解编写 Spark 程序的两种常见方式 spark-shell spark-submit Spark 官方提供 ...

  9. 大数据开发:Spark入门详解

    众所周知,Spark 它是专门为大规模数据处理而设计的快速通用计算引擎,因此Spark它在数据的挖掘等领域便有着非常广泛的应用,而从现阶段来讲的话它也已经形成了一个高速发展并且应用相当广泛的生态系统了 ...

  10. 比读文档更易上手的Spark入门教程来啦!

    Spark 开创至今,已经走过了近 12 年.12 年间,时代的脚步不断前进,我们看到互联网不断发展,各种初创公司崭露头角,在公司日常业务中需要处理的数据量也飞速增长.数据中心也从云下逐渐迁往云上,从 ...

最新文章

  1. 一张图看明白Git的四个区五种状态
  2. 淘宝网的技术发展史(三)——分布式时代
  3. POJ 1149(最大流)
  4. iPhone系统更新提醒怎么关闭?
  5. 洛谷——P1100 高低位交换
  6. mysql单库tps_简单计算mysql 的QPS,TPS
  7. ARM指令ldr、str、stm、ldm理解
  8. URL地址相对路径转绝对路径
  9. 《大规模元搜索引擎技(1)》一 2.1 系统体系结构
  10. Eviews操作笔记自用(横截面数据)
  11. 二阶龙格库塔公式推导_二阶龙格库塔公式.ppt
  12. 多制式射频信号发生器 信号源
  13. 网易mumu模拟器的使用
  14. only 64-bit build environment are supported beyong froyo/2.2
  15. iphone访问限制在哪 苹果手机设置访问限制方法
  16. poi HSSFCellStyle HSSFFont 设置加粗,字体,字号等样式
  17. 双极性(相)四线步进电机TC1508S(双通道直流马达驱动器)
  18. html代码轮播图片错位,可拖动选项卡嵌套图片轮播时图片错位的问题
  19. # tree bash: tree: 未找到命令...
  20. 杰理之soft off和powerdown唤醒后如何获取唤醒源?【篇】

热门文章

  1. c++字符串逆序输出
  2. 论文记载:A Survey on Traffic Signal Control Methods
  3. 中国优秀软件架构师感悟录
  4. 非常好用的自助建站程序整站源码 内置几十种站
  5. ZIP:ZipEntry
  6. 计算机内存128毫升,内存128.1M的微信怎么可能只能聊天!
  7. 微弱信号检测_光电探测与信号处理教学大纲
  8. vue里面实现百度地图 标记多点 地点连线
  9. MySQL基础命令汇总
  10. 企业产品互联网推广的有效方法