温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

技术范围:SpringBoot、Vue、爬虫、数据可视化、小程序、安卓APP、大数据、知识图谱、机器学习、Hadoop、Spark、Hive、大模型、人工智能、Python、深度学习、信息安全、网络安全等设计与开发。

主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码、文档辅导、LW文档降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。

🍅本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片🍅

🍅本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片🍅

🍅本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片🍅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及LW文档编写等相关问题都可以给我留言咨询,希望帮助更多的人

信息安全/网络安全 大模型、大数据、深度学习领域中科院硕士在读,所有源码均一手开发!

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

介绍资料

本文面向校园二手图书交易场景,完整介绍如何基于Spark、Hive与Flask搭建一套从数据清洗、离线分析到Web可视化展示的全流程系统,适合大数据初学者与校园项目开发者参考。

一、项目背景与目标

随着高校二手图书交易平台的普及,平台积累了大量交易数据,但多数系统仅停留在基础下单与支付功能层面,缺少对图书品类、交易趋势、用户行为的深度分析。本项目以校园二手图书交易数据为基础,通过大数据技术栈完成数据处理与可视化,帮助运营者直观掌握平台运行状态,为图书推荐、库存优化与运营决策提供数据支撑。

项目核心目标:

  1. 完成校园二手图书交易数据的结构化清洗与标准化存储
  2. 基于Spark实现多维度离线统计分析,挖掘数据潜在价值
  3. 通过Flask搭建轻量级Web服务,将分析结果以可视化图表形式展示
  4. 提供可扩展的架构,支持后续接入实时数据流与更多分析维度

二、技术栈选型说明

表格

组件作用版本参考
Spark Core / Spark SQL分布式数据清洗、统计分析与任务调度Spark 3.3.0
Hive数据仓库,用于结构化交易数据的分层存储与元数据管理Hive 3.1.2
Flask轻量级Python Web框架,提供后端接口与页面渲染Flask 2.2.5
ECharts前端可视化库,实现折线图、饼图、柱状图等图表展示ECharts 5.4.3
MySQL存储分析结果与基础配置信息MySQL 8.0
Python 3开发语言,用于数据处理与Web服务开发Python 3.8

三、系统整体架构设计

本系统采用经典的“数据采集-数据处理-数据服务-可视化展示”四层架构:

  1. 数据层‌:原始交易日志、用户行为数据、图书基础数据先落地到HDFS,通过Hive创建外部表完成数据映射
  2. 计算层‌:使用Spark SQL读取Hive表数据,完成ETL清洗与多维度指标计算,最终将分析结果写入MySQL
  3. 服务层‌:Flask后端从MySQL读取预计算好的指标数据,封装为RESTful接口返回给前端
  4. 展示层‌:前端页面通过ECharts渲染各类可视化图表,实现校园二手图书交易数据的直观呈现

整体架构优势在于将复杂计算任务交给Spark离线完成,Web服务仅做轻量级数据查询,保证页面访问速度,同时便于后续任务调度与监控扩展。

四、数据仓库分层设计

在Hive中我们采用ODS层、DWD层、DWS层的经典分层模型:

4.1 ODS层

原始数据层,直接映射HDFS上的原始日志文件,不做任何清洗操作,保留数据原貌。

sql

CREATE EXTERNAL TABLE IF NOT EXISTS ods_secondhand_book_order ( order_id STRING COMMENT '订单ID', user_id STRING COMMENT '用户ID', book_id STRING COMMENT '图书ID', book_name STRING COMMENT '图书名称', category STRING COMMENT '图书分类', price DECIMAL(10,2) COMMENT '交易价格', order_time STRING COMMENT '下单时间', campus STRING COMMENT '所在校区' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/hive/ods/secondhand_book_order/';

4.2 DWD层

清洗层,对ODS层数据进行去重、空值过滤、时间格式标准化,生成干净的明细数据。

sql

CREATE TABLE IF NOT EXISTS dwd_secondhand_book_order AS SELECT order_id, user_id, book_id, book_name, category, price, to_timestamp(order_time, 'yyyy-MM-dd HH:mm:ss') AS order_time, campus FROM ods_secondhand_book_order WHERE order_id IS NOT NULL AND price > 0;

4.3 DWS层

汇总层,面向统计指标提前完成聚合计算,为后续Spark分析提供高效数据源。

 

sql

CREATE TABLE IF NOT EXISTS dws_daily_sales ( dt STRING COMMENT '日期', total_order INT COMMENT '当日订单量', total_amount DECIMAL(10,2) COMMENT '当日交易额' ) PARTITIONED BY (dt) STORED AS PARQUET;

五、Spark核心分析代码实现

使用Spark SQL连接Hive,完成多维度指标计算,以下是核心代码示例:

from pyspark.sql import SparkSession

# 创建SparkSession并支持Hive
spark = SparkSession.builder \
    .appName("SecondHandBookAnalysis") \
    .enableHiveSupport() \
    .getOrCreate()

# 1. 统计每日交易趋势
daily_sales_df = spark.sql("""
SELECT 
    date_format(order_time, 'yyyy-MM-dd') as dt,
    count(distinct order_id) as order_cnt,
    sum(price) as total_amount
FROM dwd_secondhand_book_order
GROUP BY date_format(order_time, 'yyyy-MM-dd')
ORDER BY dt
""")

# 2. 统计图书分类占比
category_df = spark.sql("""
SELECT 
    category,
    count(*) as cnt
FROM dwd_secondhand_book_order
GROUP BY category
""")

# 3. 统计各校区交易排行
campus_df = spark.sql("""
SELECT 
    campus,
    sum(price) as campus_amount
FROM dwd_secondhand_book_order
GROUP BY campus
ORDER BY campus_amount DESC
""")

# 将结果写入MySQL,供Flask读取
daily_sales_df.write.format("jdbc") \
    .option("url", "jdbc:mysql://localhost:3306/book_db") \
    .option("dbtable", "daily_sales") \
    .option("user", "root") \
    .option("password", "123456") \
    .mode("overwrite") \
    .save()

六、Flask后端接口开发

Flask负责从MySQL读取分析结果,封装为接口返回前端,核心代码如下:

from flask import Flask, jsonify, render_template
import pymysql

app = Flask(__name__)

# 数据库连接
def get_db_conn():
    return pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='book_db',
        charset='utf8'
    )

# 首页路由
@app.route('/')
def index():
    return render_template('index.html')

# 获取每日交易数据接口
@app.route('/api/daily_sales')
def daily_sales():
    conn = get_db_conn()
    cursor = conn.cursor()
    cursor.execute("SELECT dt, order_cnt, total_amount FROM daily_sales ORDER BY dt")
    data = cursor.fetchall()
    conn.close()
    return jsonify({
        'dates': [item[0] for item in data],
        'order_cnt': [item[1] for item in data],
        'total_amount': [float(item[2]) for item in data]
    })

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

七、ECharts前端可视化实现

在templates/index.html中引入ECharts,完成图表渲染:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>校园二手图书交易数据可视化</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js">
</head>
<body style="margin: 0;padding: 0;">
    <div id="salesChart" style="width: 90%;height: 400px;margin: 20px auto;"></div>
    
    <script type="text/javascript">
        var myChart = echarts.init(document.getElementById('salesChart'));
        
        fetch('/api/daily_sales')
            .then(res => res.json())
            .then(data => {
                var option = {
                    title: {text: '每日交易趋势'},
                    xAxis: {type: 'category', data: data.dates},
                    yAxis: [
                        {type: 'value', name: '订单量'},
                        {type: 'value', name: '交易额'}
                    ],
                    series: [
                        {name: '订单量', type: 'line', data: data.order_cnt},
                        {name: '交易额', type: 'bar', yAxisIndex: 1, data: data.total_amount}
                    ]
                };
                myChart.setOption(option);
            });
    </script>
</body>
</html>

八、项目部署与运行流程

  1. 启动Hadoop、Hive与Spark集群服务,将原始交易数据上传至HDFS对应路径
  2. 在Hive中创建ODS、DWD、DWS三层表,完成数据映射与清洗
  3. 提交Spark任务运行分析代码,将统计结果写入MySQL数据库
  4. 启动Flask服务,访问http://localhost:5000即可查看可视化页面
  5. 可配置Airflow调度器,实现每日凌晨自动执行Spark分析任务,完成数据更新

九、项目总结与扩展方向

本项目通过Spark+Hive+Flask的组合,低成本实现了校园二手图书交易数据的全流程分析与可视化,非常适合作为大数据课程设计与毕设项目。后续可扩展方向包括:接入Kafka实现实时交易数据统计、增加用户画像与图书推荐模块、搭建集群监控页面等,进一步提升系统的实用性与复杂度。


运行截图

推荐项目

上万套Java、Python、大数据、机器学习、深度学习等高级选题(源码+lw+部署文档+讲解等)

项目案例

优势

1-项目均为博主学习开发自研,适合新手入门和学习使用

2-所有源码均一手开发,不是模版!不容易跟班里人重复!

为什么选择我

 博主是CSDN毕设辅导博客第一人兼开派祖师爷、博主本身从事开发软件开发、有丰富的编程能力和水平、累积给上千名同学进行辅导、全网累积粉丝超过50W。是CSDN特邀作者、博客专家、新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流和合作。 

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目代码以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片🍅

点赞、收藏、关注,不迷路

更多推荐