0


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

介绍

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

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

数据准备

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

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

数据说明:

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

代码实现

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

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

  1. import org.apache.spark.{SparkConf, SparkContext}
  2. object TopOne {
  3. def main(args: Array[String]): Unit = {
  4. //TODO 创建环境
  5. val sparkConf = new SparkConf().setMaster("local[*]").setAppName("TOP")
  6. val sc = new SparkContext(sparkConf)
  7. //TODO TOP热门商品
  8. //读取日志文件
  9. val rdd = sc.textFile("datas/action.txt")
  10. rdd.cache()
  11. //统计品类点击数量
  12. //数据清洗
  13. val clickRDD = rdd.filter(
  14. action => {
  15. val datas = action.split("_")
  16. datas(6) != "-1"
  17. }
  18. )
  19. //提取点击品类和数量并统计数量
  20. val clickCountRDD = clickRDD.map(
  21. action => {
  22. val datas = action.split("_")
  23. //(品类,数量)
  24. (datas(6),1)
  25. }
  26. ).reduceByKey(_+_)
  27. // println(">>>>>>>>>")
  28. // clickCountRDD.collect().foreach(println)
  29. //统计品类下单数量
  30. //数据清洗
  31. val orderRDD = rdd.filter(
  32. action => {
  33. val datas = action.split("_")
  34. datas(8) != "null"
  35. }
  36. )
  37. //提取下单品类和数量并统计数量
  38. val ordercountRDD = orderRDD.flatMap(
  39. action => {
  40. val datas = action.split("_")
  41. val cid = datas(8)
  42. //(品类,数量)
  43. val cids = cid.split(",")
  44. cids.map(id => (id, 1))
  45. }
  46. ).reduceByKey(_ + _)
  47. // println(">>>>>>>>")
  48. // ordercountRDD.collect().foreach(println)
  49. //统计品类支付数量
  50. //清洗数据
  51. val payRDD = rdd.filter(
  52. action => {
  53. val datas = action.split("_")
  54. datas(10) != "null"
  55. }
  56. )
  57. //提取支付品类和数量并统计数量
  58. val paycountRDD = payRDD.flatMap(
  59. action => {
  60. val datas = action.split("_")
  61. val cid = datas(10)
  62. //(品类,数量)
  63. val cids = cid.split(",")
  64. cids.map(id => (id, 1))
  65. }
  66. ).reduceByKey(_ + _)
  67. // println(">>>>>>>>>>>>")
  68. // paycountRDD.collect().foreach(println)
  69. //排序————排序顺序:先点击-->再下单-->后支付
  70. val cogroupRDD = clickCountRDD.cogroup(ordercountRDD, paycountRDD)
  71. val cogroupRDD2 = cogroupRDD.mapValues {
  72. case (clickIter, orderIter, payIter) => {
  73. var clickCnt = 0
  74. val iter1 = clickIter.iterator
  75. if (iter1.hasNext) {
  76. clickCnt = iter1.next()
  77. }
  78. var orderCnt = 0
  79. val iter2 = orderIter.iterator
  80. if (iter2.hasNext) {
  81. orderCnt = iter2.next()
  82. }
  83. var payCnt = 0
  84. val iter3 = payIter.iterator
  85. if (iter3.hasNext) {
  86. payCnt = iter3.next()
  87. }
  88. (clickCnt, orderCnt, payCnt)
  89. }
  90. }
  91. val resultRDD = cogroupRDD2.sortBy(_._2, false).take(10)
  92. //打印
  93. resultRDD.foreach(println)
  94. //TODO 关闭环境
  95. sc.stop()
  96. }
  97. }

本文为学习笔记记录!

标签: spark scala 大数据

本文转载自: https://blog.csdn.net/qq_55906442/article/details/126034543
版权归原作者 一个人的牛牛 所有, 如有侵权,请联系我们删除。

“spark:商品热门品类TOP10统计(案例)”的评论:

还没有评论