SparkSQL综合案例-省份维度的销售情况统计分析

一、项目背景

二、项目需求

        (1)需求

        ①各省销售指标,每个省份的销售额统计

        ②TOP3销售省份中,有多少家店铺日均销售额1000+

        ③TOP3省份中,各个省份的平均单价

        ④TOP3省份中,各个省份的支付类型比例

        (2)要求

        ①将需求结果写出到mysql

        ②将数据写入到Spark On Hive中

三、代码实现

        (1)需求1:
# cording:utf8
'''
要求1:各省销售额统计
要求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
要求3:TOP3省份中,各省的平均单单价
要求4:TOP3省份中,各个省份的支付类型比例
'''

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
if __name__ == '__main__':
    spark = SparkSession.builder.appName('SQL_text').\
        master('local[*]').\
        config('spark.sql.shuffle.partitions', '2').\
        config('spark.sql.warehouse.dir', 'hdfs://pyspark01/user/hive/warehouse').\
        config('hive.metastore.uris', 'thrift://pyspark01:9083').\
        enableHiveSupport().\
        getOrCreate()
    # 1.读取数据
    # 省份信息,缺失值过滤,同时省份信息中会有‘null’字符串
    # 订单的金额,数据集中有订单的金额是单笔超过10000的,这些事测试数据
    # 列值过滤(SparkSQL会自动做这个优化)
    df = spark.read.format('json').load('../../input/mini.json').\
        dropna(thresh=1, subset=['storeProvince']).\
        filter("storeProvince != 'null'").\
        filter('receivable < 10000').\
        select('storeProvince', 'storeID', 'receivable', 'dateTS', 'payType')

    # TODO 1:各省销售额统计
    province_sale_df = df.groupBy('storeProvince').sum('receivable').\
        withColumnRenamed('sum(receivable)', 'money').\
        withColumn('money', F.round('money', 2)).\
        orderBy('money', ascending=False)
    province_sale_df.show(truncate=False)

    # 写出到Mysql
    province_sale_df.write.mode('overwrite').\
        format('jdbc').\
        option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8').\
        option('dbtable', 'province_sale').\
        option('user', 'root').\
        option('password', 'root').\
        option('encoding', 'utf8').\
        save()

    # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # 会将表写入到hive的数据仓库中
    province_sale_df.write.mode('overwrite').saveAsTable('default.province_sale', 'parquet')

        结果展示:

        MySQL数据展示:

        Hive数据展示:

        (2)需求2:
# cording:utf8
'''
要求1:各省销售额统计
要求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
要求3:TOP3省份中,各省的平均单单价
要求4:TOP3省份中,各个省份的支付类型比例
'''

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.storagelevel import StorageLevel

if __name__ == '__main__':
    spark = SparkSession.builder.appName('SQL_text').\
        master('local[*]').\
        config('spark.sql.shuffle.partitions', '2').\
        config('spark.sql.warehouse.dir', 'hdfs://pyspark01/user/hive/warehouse').\
        config('hive.metastore.uris', 'thrift://pyspark01:9083').\
        enableHiveSupport().\
        getOrCreate()
    # 1.读取数据
    # 省份信息,缺失值过滤,同时省份信息中会有‘null’字符串
    # 订单的金额,数据集中有订单的金额是单笔超过10000的,这些事测试数据
    # 列值过滤(SparkSQL会自动做这个优化)
    df = spark.read.format('json').load('../../input/mini.json').\
        dropna(thresh=1, subset=['storeProvince']).\
        filter("storeProvince != 'null'").\
        filter('receivable < 10000').\
        select('storeProvince', 'storeID', 'receivable', 'dateTS', 'payType')

    # TODO 1:各省销售额统计
    province_sale_df = df.groupBy('storeProvince').sum('receivable').\
        withColumnRenamed('sum(receivable)', 'money').\
        withColumn('money', F.round('money', 2)).\
        orderBy('money', ascending=False)
    # # 写出到Mysql
    # province_sale_df.write.mode('overwrite').\
    #     format('jdbc').\
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8').\
    #     option('dbtable', 'province_sale').\
    #     option('user', 'root').\
    #     option('password', 'root').\
    #     option('encoding', 'utf8').\
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # province_sale_df.write.mode('overwrite').saveAsTable('default.province_sale', 'parquet')

    # TODO 需求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
    # 2.1 找到TOP3的销售省份
    top3_province_df = province_sale_df.limit(3).select('storeProvince').\
        withColumnRenamed('storeProvince', 'top3_province')     # 对列名进行重命名,防止与province_sale_df的storeProvince冲突

    # 2.2 和原始的DF进行内关联,数据关联后,得到TOP3省份的销售数据
    top3_province_df_joined = df.join(top3_province_df, on=df['storeProvince'] == top3_province_df['top3_province'])

    # 因为需要多次使用到TOP3省份数据,所有对其进行持久化缓存
    top3_province_df_joined.persist(StorageLevel.MEMORY_AND_DISK)

    # from_unixtime将秒级的日期数据转换为年月日数据
    # from_unixtime的精度是秒级,数据的精度是毫秒级,需要对数据进行进度的裁剪
    province_hot_store_count_df = top3_province_df_joined.groupBy("storeProvince", "storeID",
                        F.from_unixtime(df['dateTS'].substr(0, 10), "yyyy-mm-dd").alias('day')).\
                        sum('receivable').withColumnRenamed('sum(receivable)', 'money').\
                         filter('money > 1000 ').\
                        dropDuplicates(subset=['storeID']).\
                        groupBy('storeProvince').count()
    province_hot_store_count_df.show()
    # 写出到Mysql
    province_sale_df.write.mode('overwrite'). \
        format('jdbc'). \
        option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
        option('dbtable', 'province_hot_store_count'). \
        option('user', 'root'). \
        option('password', 'root'). \
        option('encoding', 'utf8'). \
        save()

    # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # 会将表写入到hive的数据仓库中
    province_sale_df.write.mode('overwrite').saveAsTable('default.province_hot_store_count', 'parquet')

    top3_province_df_joined.unpersist()

        结果展示:

        MySQL结果展示:

        Hive结果展示:

        (3)需求3:
# cording:utf8
'''
要求1:各省销售额统计
要求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
要求3:TOP3省份中,各省的平均单单价
要求4:TOP3省份中,各个省份的支付类型比例
'''

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.storagelevel import StorageLevel

if __name__ == '__main__':
    spark = SparkSession.builder.appName('SQL_text').\
        master('local[*]').\
        config('spark.sql.shuffle.partitions', '2').\
        config('spark.sql.warehouse.dir', 'hdfs://pyspark01/user/hive/warehouse').\
        config('hive.metastore.uris', 'thrift://pyspark01:9083').\
        enableHiveSupport().\
        getOrCreate()
    # 1.读取数据
    # 省份信息,缺失值过滤,同时省份信息中会有‘null’字符串
    # 订单的金额,数据集中有订单的金额是单笔超过10000的,这些事测试数据
    # 列值过滤(SparkSQL会自动做这个优化)
    df = spark.read.format('json').load('../../input/mini.json').\
        dropna(thresh=1, subset=['storeProvince']).\
        filter("storeProvince != 'null'").\
        filter('receivable < 10000').\
        select('storeProvince', 'storeID', 'receivable', 'dateTS', 'payType')

    # TODO 1:各省销售额统计
    province_sale_df = df.groupBy('storeProvince').sum('receivable').\
        withColumnRenamed('sum(receivable)', 'money').\
        withColumn('money', F.round('money', 2)).\
        orderBy('money', ascending=False)
    # # 写出到Mysql
    # province_sale_df.write.mode('overwrite').\
    #     format('jdbc').\
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8').\
    #     option('dbtable', 'province_sale').\
    #     option('user', 'root').\
    #     option('password', 'root').\
    #     option('encoding', 'utf8').\
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # province_sale_df.write.mode('overwrite').saveAsTable('default.province_sale', 'parquet')

    # TODO 需求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
    # 2.1 找到TOP3的销售省份
    top3_province_df = province_sale_df.limit(3).select('storeProvince').\
        withColumnRenamed('storeProvince', 'top3_province')     # 对列名进行重命名,防止与province_sale_df的storeProvince冲突

    # 2.2 和原始的DF进行内关联,数据关联后,得到TOP3省份的销售数据
    top3_province_df_joined = df.join(top3_province_df, on=df['storeProvince'] == top3_province_df['top3_province'])

    # 因为需要多次使用到TOP3省份数据,所有对其进行持久化缓存
    top3_province_df_joined.persist(StorageLevel.MEMORY_AND_DISK)

    # from_unixtime将秒级的日期数据转换为年月日数据
    # from_unixtime的精度是秒级,数据的精度是毫秒级,需要对数据进行进度的裁剪
    province_hot_store_count_df = top3_province_df_joined.groupBy("storeProvince", "storeID",
                        F.from_unixtime(df['dateTS'].substr(0, 10), "yyyy-mm-dd").alias('day')).\
                        sum('receivable').withColumnRenamed('sum(receivable)', 'money').\
                         filter('money > 1000 ').\
                        dropDuplicates(subset=['storeID']).\
                        groupBy('storeProvince').count()
    province_hot_store_count_df.show()
    # # 写出到Mysql
    # province_hot_store_count_df.write.mode('overwrite'). \
    #     format('jdbc'). \
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
    #     option('dbtable', 'province_hot_store_count'). \
    #     option('user', 'root'). \
    #     option('password', 'root'). \
    #     option('encoding', 'utf8'). \
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # province_hot_store_count_df.write.mode('overwrite').saveAsTable('default.province_hot_store_count', 'parquet')


    # TODO 3:TOP3省份中,各省的平均单单价
    top3_province_order_avg_df = top3_province_df_joined.groupBy("storeProvince").\
        avg("receivable").\
        withColumnRenamed("avg(receivable)", "money").\
        withColumn("money", F.round("money", 2)).\
        orderBy("money", ascending=False)
    top3_province_order_avg_df.show(truncate=False)

    # 写出到Mysql
    top3_province_order_avg_df.write.mode('overwrite'). \
        format('jdbc'). \
        option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
        option('dbtable', 'top3_province_order_avg'). \
        option('user', 'root'). \
        option('password', 'root'). \
        option('encoding', 'utf8'). \
        save()

    # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # 会将表写入到hive的数据仓库中
    top3_province_order_avg_df.write.mode('overwrite').saveAsTable('default.top3_province_order_avg', 'parquet')

    top3_province_df_joined.unpersist()

        结果展示

        MySQL与Hive结果展示:

        (4)需求4:
# cording:utf8
'''
要求1:各省销售额统计
要求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
要求3:TOP3省份中,各省的平均单单价
要求4:TOP3省份中,各个省份的支付类型比例
'''

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.storagelevel import StorageLevel
from pyspark.sql.types import StringType
if __name__ == '__main__':
    spark = SparkSession.builder.appName('SQL_text').\
        master('local[*]').\
        config('spark.sql.shuffle.partitions', '2').\
        config('spark.sql.warehouse.dir', 'hdfs://pyspark01/user/hive/warehouse').\
        config('hive.metastore.uris', 'thrift://pyspark01:9083').\
        enableHiveSupport().\
        getOrCreate()
    # 1.读取数据
    # 省份信息,缺失值过滤,同时省份信息中会有‘null’字符串
    # 订单的金额,数据集中有订单的金额是单笔超过10000的,这些事测试数据
    # 列值过滤(SparkSQL会自动做这个优化)
    df = spark.read.format('json').load('../../input/mini.json').\
        dropna(thresh=1, subset=['storeProvince']).\
        filter("storeProvince != 'null'").\
        filter('receivable < 10000').\
        select('storeProvince', 'storeID', 'receivable', 'dateTS', 'payType')

    # TODO 1:各省销售额统计
    province_sale_df = df.groupBy('storeProvince').sum('receivable').\
        withColumnRenamed('sum(receivable)', 'money').\
        withColumn('money', F.round('money', 2)).\
        orderBy('money', ascending=False)
    # # 写出到Mysql
    # province_sale_df.write.mode('overwrite').\
    #     format('jdbc').\
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8').\
    #     option('dbtable', 'province_sale').\
    #     option('user', 'root').\
    #     option('password', 'root').\
    #     option('encoding', 'utf8').\
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # province_sale_df.write.mode('overwrite').saveAsTable('default.province_sale', 'parquet')

    # TODO 需求2:TOP3销售省份中,有多少店铺达到过日销售额1000+
    # 2.1 找到TOP3的销售省份
    top3_province_df = province_sale_df.limit(3).select('storeProvince').\
        withColumnRenamed('storeProvince', 'top3_province')     # 对列名进行重命名,防止与province_sale_df的storeProvince冲突

    # 2.2 和原始的DF进行内关联,数据关联后,得到TOP3省份的销售数据
    top3_province_df_joined = df.join(top3_province_df, on=df['storeProvince'] == top3_province_df['top3_province'])

    # 因为需要多次使用到TOP3省份数据,所有对其进行持久化缓存
    top3_province_df_joined.persist(StorageLevel.MEMORY_AND_DISK)

    # from_unixtime将秒级的日期数据转换为年月日数据
    # from_unixtime的精度是秒级,数据的精度是毫秒级,需要对数据进行进度的裁剪
    province_hot_store_count_df = top3_province_df_joined.groupBy("storeProvince", "storeID",
                        F.from_unixtime(df['dateTS'].substr(0, 10), "yyyy-mm-dd").alias('day')).\
                        sum('receivable').withColumnRenamed('sum(receivable)', 'money').\
                         filter('money > 1000 ').\
                        dropDuplicates(subset=['storeID']).\
                        groupBy('storeProvince').count()
    province_hot_store_count_df.show()
    # # 写出到Mysql
    # province_hot_store_count_df.write.mode('overwrite'). \
    #     format('jdbc'). \
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
    #     option('dbtable', 'province_hot_store_count'). \
    #     option('user', 'root'). \
    #     option('password', 'root'). \
    #     option('encoding', 'utf8'). \
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # province_hot_store_count_df.write.mode('overwrite').saveAsTable('default.province_hot_store_count', 'parquet')


    # TODO 3:TOP3省份中,各省的平均单单价
    top3_province_order_avg_df = top3_province_df_joined.groupBy("storeProvince").\
        avg("receivable").\
        withColumnRenamed("avg(receivable)", "money").\
        withColumn("money", F.round("money", 2)).\
        orderBy("money", ascending=False)
    top3_province_order_avg_df.show(truncate=False)

    # # 写出到Mysql
    # top3_province_order_avg_df.write.mode('overwrite'). \
    #     format('jdbc'). \
    #     option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
    #     option('dbtable', 'top3_province_order_avg'). \
    #     option('user', 'root'). \
    #     option('password', 'root'). \
    #     option('encoding', 'utf8'). \
    #     save()
    #
    # # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # # 会将表写入到hive的数据仓库中
    # top3_province_order_avg_df.write.mode('overwrite').saveAsTable('default.top3_province_order_avg', 'parquet')

    # TODO 4:TOP3省份中,各个省份的支付类型比例
    top3_province_df_joined.createTempView("province_pay")

    # 自定义UDF
    def udf_func(percent):
        return str(round(percent * 100)) + "%"
    # 注册UDF
    my_udf = F.udf(udf_func, StringType())

    pay_type_df = spark.sql('''
        SELECT storeProvince, payType, (count(payType) / total) AS percent FROM 
        (SELECT storeProvince, payType, count(1) OVER(PARTITION BY storeProvince) AS total FROM province_pay) AS sub
        GROUP BY storeProvince, payType, total
    ''').withColumn('percent', my_udf("percent"))
    pay_type_df.show()

    # 写出到Mysql
    pay_type_df.write.mode('overwrite'). \
        format('jdbc'). \
        option('url', 'jdbc:mysql://pyspark01:3306/bigdata?useSSL=False&useUnicode=true&characterEncoding=utf8'). \
        option('dbtable', 'pay_type'). \
        option('user', 'root'). \
        option('password', 'root'). \
        option('encoding', 'utf8'). \
        save()

    # 写出Hive表 saveAsTable 可以写出表 要求已经配置好spark on hive
    # 会将表写入到hive的数据仓库中
    top3_province_order_avg_df.write.mode('overwrite').saveAsTable('default.pay_type', 'parquet')

    top3_province_df_joined.unpersist()

       结果展示:

       MySQL结果展示:

        Hive结果展示:

四、项目运行问题及解决方法

        报错:java.sql.BatchUpdateException: Incorrect string value: '\xE6\xB1\x9F\xE8\xA5\xBF...' for column 'storeProvince' atrow1

        原因:MySQL的UTF-8只支持3个字节的unicode字符,无法支持四个字节的Unicode字符

        解决办法:在MySQL控制台执行下列代码修改编码格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/107338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车行驶性能的主观评价方法(2)-驾驶员的任务

人&#xff08;驾驶员&#xff09;-车辆-环境闭环控制系统 驾驶过程中&#xff0c;驾驶员承担着操纵车辆和控制车辆的任务。驾驶员在不知不觉中接受了大量光学、声学和动力学信息并予以评价&#xff0c;同时不断地通过理论值和实际值的比较来完成控制作用&#xff08;图 2.1&a…

贪心算法总结(未完结)

贪心的定义&#xff08;摘自百度百科&#xff09; 贪心算法&#xff08;greedy algorithm&#xff0c;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的…

Jmeter 接口测试,参数值为列表,如何参数化?

最近在我的教学过程中&#xff0c;我的一个学生问了我一个问题&#xff0c;他们公司的一个接口参数值是列表&#xff0c;列表中值的数量有多有少&#xff0c;问我在 jmeter 中如何让这个参数的值进行参数化&#xff1f; 看到这种问题&#xff0c;你的第一反应是什么&#xff1f…

mysql-面试50题-2

一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student values(02 , 钱电 , 1990-12-21 , 男); insert into Student v…

如何理解my_map.yaml中origin的含义

当然可以。首先,我们先了解一下2D地图的基本构成。2D地图实际上是一个网格系统,其中每个单元格(或像素)代表现实世界中的一个区域。当我们谈论origin时,我们实际上是在描述这个网格如何在真实的3D空间中放置。 让我们通过一个简单的示意图来解释: 假设上面的矩形表示一个…

【可变形注意力(1)】Multi-scale Deformable Attention Transformers 多尺度变形注意力

文章目录 前言论文 《Deformable DETR: Deformable Transformers for End-to-End Object Detection》的多尺度变形注意力的解读DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION **2.** Deformable Attention ModuleDeformable Attention Module 3. Multi-Scale Defor…

【开源】基于SpringBoot的森林火灾预警系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点

Chaikin算法——计算折线对应的平滑曲线坐标点 本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法&#xff0c;通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作&#xff0c;得到平滑的曲线坐…

【原创】解决Kotlin无法使用@Slf4j注解的问题

前言 主要还是辟谣之前的网上的用法&#xff0c;当然也会给出最终的使用方法。这可是Kotlin&#xff0c;关Slf4j何事&#xff01;&#xff1f; 辟谣内容&#xff1a;创建注解来解决这个问题 例如&#xff1a; Target(AnnotationTarget.CLASS) Retention(AnnotationRetentio…

开源Linux社区Armbian开发指南

1. 什么是armbian Armbian是一个基于Debian或Ubuntu的开源操作系统&#xff0c;专门针对嵌入式ARM平台进行优化和定制。Armbian可以运行在多种不同的嵌入式设备上&#xff0c;例如树莓派、ArmSoM、香蕉派等等。Armbian针对不同的嵌入式平台&#xff0c;提供了相应的硬件支持&a…

利用HTTP2,新型DDoS攻击峰值破纪录

亚马逊、Cloudflare 和谷歌周二联合发布消息称&#xff0c;一种依赖于 HTTP/2 快速重置技术的攻击行为对它们造成了破纪录的分布式拒绝服务 (DDoS) 攻击。 根据披露的信息&#xff0c;该攻击自8月下旬以来便一直存在&#xff0c;所利用的漏洞被跟踪为CVE-2023-44487&#xff0c…

基于SpringBoot+Vue的服装销售系统

基于SpringBootVue的服装销售平台的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 我的订单 登录界面 管理员界面 摘要 基于SpringBoot和Vue的服装销售系统…

管理类联考——数学——汇总篇——知识点突破——数据分析——记忆

文章目录 考点记忆/考点汇总——按大纲 整体目录大纲法记忆宫殿法绘图记忆法 局部数字编码法对号不对号 归类记忆法重点记忆法歌决记忆法口诀&#xff1a;加法分类&#xff0c;类类相加&#xff1b;乘法分步&#xff0c;步步相乘。 谐音记忆法涂色 理解记忆法比较记忆法转图像记…

Qwt开发环境搭建(保姆级教程)

1.简介 QWT&#xff0c;即Qt Widgets for Technical Applications&#xff0c;其目标是以基于2D方式的窗体部件来显示数据&#xff0c; 数据源以数值&#xff0c;数组或一组浮点数等方式提供&#xff0c; 输出方式可以是Curves&#xff08;曲线&#xff09;&#xff0c;Slider…

计算机毕设 opencv 图像识别 指纹识别 - python

文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往…

liunx Centos-7.5上 rabbitmq安装

在安装rabbitmq中需要注意&#xff1a; 1、rabbitmq依赖于erlang&#xff0c;需要先安装erlang 2、erlang和rabbitmq版本有对应关系 可参考网页&#xff1a;https://www.rabbitmq.com/which-erlang.html 第一步&#xff0c;安装编译工具及库文件,如果服务器上已经有了&…

如何在vscode中添加less插件

Less &#xff08;Leaner Style Sheets 的缩写&#xff09; 是一门向后兼容的 CSS 扩展语言。它对CSS 语言增加了少许方便的扩展&#xff0c;通过less可以编写更少的代码实现更强大的样式。但less不是css&#xff0c;浏览器不能直接识别&#xff0c;即浏览器无法执行less代码&a…

【mediasoup-sfu-cpp】3: SfuDemo:加入会议首次成功运行

【mediasoup-sfu-cpp】2:SfuCppDemo 和MediaSoup实例 可以发现闫华大神的demo是开箱即用的。虽然客户端的demo 未开源,但是是可以测试的。正确加入后应该就是发布了视频的 加入会议后默认开启camera,ID 是自己填写的,代表UID demo自己随机生成就可以。 配置本地服务地址 ws…

场效应管器件

在面试硬件方面的工作时&#xff0c;我们通常会被提问模电方面的知识。 场效应管简称FET,有三级&#xff1a;源极(S)、漏极(D)、栅极&#xff08;G&#xff09;&#xff1b;可以实现电压控制电流源&#xff1b;“源极和漏极之间的漏极电流Id&#xff0c;由栅极的负电压进行控制…

轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC

啥&#xff1f;Spring Boot 不用&#xff1f;——对。就只是使用 Spring MVC Embedded Tomcat&#xff0c;而不用 Boot。为啥&#xff1f;——因为 Boot 太重了&#xff1a;&#xff09; 那是反智吗&#xff1f;Spring Boot 好好的就只是因为太重就不用&#xff1f;——稍安勿…