Spark SQL【电商购买数据分析】

数据说明

Spark 数据分析 (Scala)

Scala 复制代码
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

import java.io.{File, PrintWriter}

object Taobao {

  case class Info(userId: Long,itemId: Long,action: String,time: String)

  def main(args: Array[String]): Unit = {
    // 使用2个CPU核心
    val conf = new SparkConf().setMaster("local[2]").setAppName("tao bao product")
    val spark = SparkSession.builder().config(conf).getOrCreate()
    import spark.implicits._
    val sc = spark.sparkContext

    // 从本地文件系统加载文件生成RDD对象
    val rdd: RDD[Array[String]] = sc.textFile("data/practice2/Processed_UserBehavior.csv").map(_.split(","))
    // RDD 转为 DataFrame对象
    val df: DataFrame = rdd.map(attr => Info(attr(0).trim.toInt, attr(1).trim.toInt, attr(2), attr(3))).toDF()

    // Spark 数据分析
    //1.用户行为信息统计
    val behavior_count: DataFrame = df.groupBy("action").count()
    val result1 = behavior_count.toJSON.collectAsList().toString
//    val writer1 = new PrintWriter(new File("data/practice2/result1.json"))
//    writer1.write(result1)
//    writer1.close()

    //2.销量前十的商品信息统计
    val top_10_item:Array[(String,Int)] = df.filter(df("action") === "buy").select(df("itemId"))
      .rdd.map(v => (v(0).toString,1))
      .reduceByKey(_+_)
      .sortBy(_._2,false)
      .take(10)
    val result2 = sc.parallelize(top_10_item).toDF().toJSON.collectAsList().toString
//    val writer2 = new PrintWriter(new File("data/practice2/result2.json"))
//    writer2.write(result2)
//    writer2.close()

    //3.购物数量前十的用户信息统计
    val top_10_user: Array[(String,Int)] = df.filter(df("action") === "buy").select(df("userId"))
      .rdd.map(v => (v(0).toString, 1))
      .reduceByKey(_ + _)
      .sortBy(_._2, false)
      .take(10)
    val result3 = sc.parallelize(top_10_user).toDF().toJSON.collectAsList().toString
//    val writer3 = new PrintWriter(new File("data/practice2/result3.json"))
//    writer3.write(result3)
//    writer3.close()

    // 4.时间段内平台商品销量统计
    val buy_order_by_date: Array[(String,Int)] = df.filter(df("action") === "buy").select(df("time"))
      .rdd.map(v => (v.toString().replace("[","").replace("]","").split(" ")(0),1)
    ).reduceByKey(_+_).sortBy(_._1).collect()
    //转为dataframe
//    buy_order_by_date.foreach(println)
    /*
    (2017-11-25,21747)
    (2017-11-26,22265)
    (2017-11-27,24583)
    (2017-11-28,23153)
    (2017-11-29,24102)
    (2017-11-30,23994)
    (2017-12-01,23153)
    (2017-12-02,28512)
     */
    val result4 = sc.parallelize(buy_order_by_date).toDF().toJSON.collectAsList().toString
    val writer4 = new PrintWriter(new File("data/practice2/result4.json"))
    writer4.write(result4)
    writer4.close()

    sc.stop()
    spark.stop()
  }
}

数据可视化(pyecharts)

1、 用户行为数据分析

2、销量前 10 的商品数据

3、用户购买量前 10

4、时间段商品销量波动

相关推荐
TG_yunshuguoji1 天前
亚马逊云代理:亚马逊云怎么样进行大规模数据分析与处理?
数据挖掘·数据分析·云计算·aws
Y学院1 天前
Python 数据分析:从新手到高手的“摸鱼”指南
python·数据分析
F_D_Z1 天前
【SQL】指定日期的产品价格
数据库·sql·mysql
IT学长编程1 天前
计算机毕业设计 基于大数据技术的医疗数据分析与研究 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·机器学习·数据分析·毕业设计·毕业论文·医疗数据分析
lwprain1 天前
龙蜥8.10中spark各种集群及单机模式的搭建spark3.5.6(基于hadoop3.3.6集群)
大数据·ajax·spark
麦聪聊数据1 天前
如何使用 QuickAPI 快速连接 MySQL 数据库并发布 RESTful API
数据库·sql·mysql·restful·数据服务
IT学长编程1 天前
计算机毕业设计 基于深度学习的酒店评论文本情感分析研究 Python毕业设计项目 Hadoop毕业设计选题 机器学习选题【附源码+文档报告+安装调试】
hadoop·python·深度学习·机器学习·数据分析·毕业设计·酒店评论文本情感分析
HaiLang_IT1 天前
数据分析毕业论文题目推荐:精选选题清单
大数据·数据分析·毕业设计
数巨小码人1 天前
Oracle SQL调优技巧实战指南
数据库·sql·oracle
无名客01 天前
SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题
java·数据库·sql·sql语句优化