Python第二语言(十三、PySpark实战)

目录

1.开篇

2. PySpark介绍

3. PySpark基础准备

3.1 PySpark安装

3.2 掌握PySpark执行环境入口对象的构建

3.3 理解PySpark的编程模型

4. PySpark:RDD对象数据输入

4.1 RDD对象概念:PySpark支持多种数据的输入,完成后会返回RDD类的对象;

4.2 Python数据容器转RDD对象.parallelize(数据容器对象)

4.3 RDD存在很多计算的方法

4.4 读取文件转RDD对象:通过SparkContext入口对象来读取文件,构建RDD对象;

5. PySpark:RDD对象数据计算(一)

5.1 给Spark设置环境变量(不设置的时候,控制台会报错,出现找不到python.exe解释器的情况)

5.2 RDD的map方法:将RDD的数据根据函数进行一条条处理

5.3 RDD的flatMap方法:基本和map一样,但是多一个功能:将嵌套list给转成单list;[[1, 2, 3], [4, 5, 6]]转成[1, 2, 3, 4, 5, 6]

5.4 RDD的reduceByKey方法:将key分组后进行value逻辑处理;

6. 数据计算案例(一):完成使用PySpark进行单词技术的案例

7. PySpark:RDD对象数据计算(二)

7.1 RDD的filter方法:传入T泛型数据,返回bool,为false 的数据丢弃,为true的数据保留;(函数对RDD数据逐个处理,得到True的保留至返回值的RDD中)

7.2 RDD的distinct方法:对RDD数据进行去重,返回新RDD;

7.3 RDD的sortBy方法:对RDD的容器按照指定规则排序,返回新RDD;

8. 数据计算案例(二):计算城市中的商品以及销售额

8.1 需求

8.2 文件数据

8.3 需求一实现:处理结果自动返回的是一个二元元组;

8.4 需求二实现:将字典中的数据处理,返回一个list;

8.5 需求三实现:过滤除北京的数据,并只返回一个参数category,是list列表,并进行去重,去重后的结果进行collect输出;

9. 将RDD的结果数据输出为Python对象的各类方法


导航:

Python第二语言(一、Python start)-CSDN博客

Python第二语言(二、Python语言基础)-CSDN博客

Python第二语言(三、Python函数def)-CSDN博客

Python第二语言(四、Python数据容器)-CSDN博客

Python第二语言(五、Python文件相关操作)-CSDN博客

Python第二语言(六、Python异常)-CSDN博客

Python第二语言(七、Python模块)-CSDN博客

Python第二语言(八、Python包)-CSDN博客

Python第二语言(九、Python第一阶段实操)-CSDN博客

Python第二语言(十、Python面向对象(上))-CSDN博客

Python第二语言(十一、Python面向对象(下))-CSDN博客

Python第二语言(十二、SQL入门和实战)-CSDN博客

Python第二语言(十三、PySpark实战)-CSDN博客

Python第二语言(十四、高阶基础)-CSDN博客

1.开篇

  • PySpark大数据计算第三方库,Spark是大数据开发的核心技术;
  • python的spark中使用map时 Python worker exited unexpectedly (crashed)
    • 将原本的python12解释器降低版本到python10版本解释器,降低python解释器版本,因为版本不兼容;
    •  
    •  记得下载使用的包;

2. PySpark介绍

  • Apache Spark是用于大规模数据(large-scala data)处理的统一(unifield)分析引擎;
  • Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据;
  • Python On Spark:Python语言,是Spark重点支持的方向;

PySpark第三方库:

  • PySpark是由Spark官方开发的Python语言第三方库;
  • Python开发者可以使用pip程序快速安装PySpark并像其它第三方库一样使用;
  • 主要作用:
    • 进行数据处理;
    • 提交至Spark集群,进行分布式集群计算;

3. PySpark基础准备

3.1 PySpark安装

安装命令: pip install pyspark

加速下载命令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark

3.2 掌握PySpark执行环境入口对象的构建
  • PySpark是分布式集群的操作,setMaster(xxx).\setAppName(xxx)是用来控制集群的代码,图中代码用的是单机的;
  • setAppName是Spark任务的名称;
  • PySpark的执行环境入口对象是:类SparkContext的类对象,所有PySpark的功能都是从SparkContext对象作为开始;
# 导包
from pyspark import SparkConf, SparkContext# 创建SparkConf类对象
conf = SparkConf().setMaster("local[*]").\setAppName("test_spark_app")# 基于SparkConf类对象创建SparkContext类对象
sc = SparkContext(conf=conf)# 打印PySpark的运行版本
print(sc.version)# 停止SparkContext对象的运行
sc.stop()

3.3 理解PySpark的编程模型

SparkContext类对象,是PySpark编程中一切功能的入口;

  • PySpark的编程三大步骤:
    1. 数据输入:通过SparkContex类对象的成员方法完成数据的读取操作,读取后得到RDD类对象;
    2. 数据处理计算:通过RDD类对象的成员方法,完成各种数据计算的需求;
    3. 数据输出:将处理完成后的RDD对象,调用各种成员方法完成,写出文件,转换位list等操作;

4. PySpark:RDD对象数据输入

  • RDD就是PySpark计算后返回的对象容器;
4.1 RDD对象概念:PySpark支持多种数据的输入,完成后会返回RDD类的对象;

RDD全称为:弹性分布式数据集(Resilient Distributed Datasets);

  • PySpark针对数据的处理,都是以RDD对象作为载体;
    1. 数据存储在RDD内;
    2. 各类数据的计算方法,也都是RDD的成员方法;
    3. RDD的数据计算方法,返回值依旧是RDD对象;
  • 比如说JSON文件、文本文件、数据库数据,都是可以通过SparkContext类对象,经过RDD对象的处理,并返回给文件文件或JSON文件,或者数据库;
4.2 Python数据容器转RDD对象.parallelize(数据容器对象)
  • 提示:
    1. 字符串会被拆分出1个个的字符,存入RDD对象;
    2. 字典仅有key会被存入RDD对象;
    3. RDD对象返回的是容器,与list一样结果;
from pyspark import SparkConf, SparkContextconf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
sc = SparkContext(conf=conf)# 通过parallelize方法将Python对象加载到Spark内,称为RDD对象
rdd1 = sc.parallelize([1, 2, 3, 4, 5])
rdd2 = sc.parallelize((1, 2, 3, 4, 5))
rdd3 = sc.parallelize("abcdefg")
rdd4 = sc.parallelize({1, 2, 3, 4, 5})
rdd5 = sc.parallelize({"key1": "value1", "key2": "value2"})# 使用collect方法查看RDD中的内容
print(rdd1.collect())
print(rdd2.collect())
print(rdd3.collect())
print(rdd4.collect())
print(rdd5.collect())sc.stop()

4.3 RDD存在很多计算的方法

4.4 读取文件转RDD对象:通过SparkContext入口对象来读取文件,构建RDD对象;
from pyspark import SparkConf, SparkContextconf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
sc = SparkContext(conf=conf)# 通过textFile方法,读取文件数据加载到Spark内,成为RDD对象
rdd = sc.textFile("dataText")# 打印RDD内容
print(rdd.collect())
sc.stop()

小结:

  • RDD对象称之为分布式弹性数据集,是PySpark中数据计算的载体,可以:
    1. 提供数据存储;
    2. 提供数据计算的各类方法;
    3. 数据计算的方法,返回值依旧是RDD(RDD迭代计算);

5. PySpark:RDD对象数据计算(一)

  • 可以对list容器计算,可以对dict字典容器计算,可以对str字符串进行计算,所有的容器都可以通过RDD计算;
5.1 给Spark设置环境变量(不设置的时候,控制台会报错,出现找不到python.exe解释器的情况)

os.path.exists 返回值为True或False;

from pyspark import SparkConf, SparkContext
import os# 配置Spark环境变量
os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'# 检查PYSPARK_PYTHON路径
print(os.path.exists('C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'))
# 检查PYSPARK_DRIVER_PYTHON路径
print(os.path.exists('C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'))

5.2 RDD的map方法:将RDD的数据根据函数进行一条条处理

1. 介绍:

  • RDD对象内置丰富的:成员方法(算子)
  • map算子:是将RDD的数据一条条处理(处理的逻辑是将python中的函数作为参数进行传递,这个函数,参数会将RDD种的每条数据都进行处理)最终返回一个新的RDD对象;
    • map()中的参数 (T) → U:T代表传入一个参数,U代表一个返回值;(意思代表传入的参数是一个,还有一个返回值,T是泛型,不用指定数据类型)
    • map()中的参数 (T) → T:T代表传入一个参数,T代表一个返回值;(意思代表传入的参数是一个,还有一个返回值,T是泛型,传入的是什么值,那么返回的就是什么类型)

2. func函数传递:

        func函数作为参数:代表的是RDD中的每个值,都会进行func函数的处理;是RDD中的每一个元素都会被RDD处理一遍;

可以简写成:rdd2 = rdd.map(lambda x: x * 10) # 简写的函数

3. 案例:

  • 这里存在一个大坑,如果是python312版本去使用map函数,会报错 Python worker exited unexpectedly (crashed) ,降低版本即可,我用的版本10;
  • 结果:RDD中的每一个元素都会被传递给func进行处理,*10操作;
from pyspark import SparkConf, SparkContext
import os# 配置Spark环境变量
os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)# 准备一个RDD
rdd = sc.parallelize([1, 2, 3, 4, 5])
rdd2 = rdd.map(lambda x: x * 10)  # 简写的函数
print(rdd2.collect())
sc.stop()

4. map链式调用:

from pyspark import SparkConf, SparkContext
import os# 配置Spark环境变量
os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize([1, 2, 3, 4, 5])rdd2 = rdd.map(lambda x: x * 10).map(lambda x: x + 5)  # 链式调用:将map进行第一个*10数据计算,再进行map+5数据计算print(rdd2.collect())

5. 小结:

  1. map算子(成员方法):
    • 接受一个处理函数,可用lambda表达式快速编写;
    • 对RDD内的元素逐个处理,并返回一个新的RDD;
  2. 链式调用:对于返回值是新RDD的算子,可以通过链式调用的方式多次调用算子;
5.3 RDD的flatMap方法:基本和map一样,但是多一个功能:将嵌套list给转成单list;[[1, 2, 3], [4, 5, 6]]转成[1, 2, 3, 4, 5, 6]
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize(["zhangSan lisi yiyi", "zhangSan yiyi wangWu", "wangWu yiyi zhangSan"])print(rdd.map(lambda x: x.split(" ")).collect())print("-----------------------------------------")print(rdd.flatMap(lambda x: x.split(" ")).collect())  # 将嵌套list转成单list,对数据接触嵌套

5.4 RDD的reduceByKey方法:将key分组后进行value逻辑处理;
  • 二元元组:[('a', 1), ('a', 1), ('b', 1)]这就是二元元组,元组中只有两个元素;

  • 自动按照key分组,完成组内数据(value)的聚合操作:就是会按照元组中的key,就是'a', 'a', 'b'进行key的value聚合,1, 1, 1是value;(value聚合的逻辑是,按照传入的func函数逻辑来进行聚合)

    假设这是二元元组数据要进行reduceByKey算子处理:

reduceByKey计算方式:

1. 思路:

  • 先分组,key值等于a和a一组,b和b一组:然后在进行函数lambda a, b: a+b进行处理,也即是分组后,a=a+a, b=b+b+b;结果[('b', 3), ('a', 2)]
  • 再解释:b有三个值,那么lambda a, b: a+b中表示的是b:1, 1, 1 的三个值,去进行函数处理的时候,先是第一个1和第二1进行相加,这时候相加是a+b,分组后与key无关系,那么第一个1和第二个1相加后等于2,这时候发现还有第三个1,这时候再次把第一次相加的结果,与第三个1进行a+b处理,2+1是前后者参数的相加处理;最终得到按照key分组聚合value的结果;
  • 最终解释:将数据分组后,每个组的数据进行lambda a, b: a + b 操作,每个组中的数据,进行a + b操作,意思就是将当前组的所有value进行相加操作;

2. 实现:

  • 功能:针对KV型RDD,自动按照key分组,然后根据提供的聚合逻辑,完成组内数据(value)的聚合操作;
  • rdd.reduceByKey(func):
    from pyspark import SparkConf, SparkContext
    import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize([('a', 1), ('a', 1), ('b', 1), ('b', 1), ('b', 1)])result = rdd.reduceByKey(lambda a, b: a + b)  # 分组计算print(result.collect())

6. 数据计算案例(一):完成使用PySpark进行单词技术的案例

  • 题目:读取文件,求出文件中单词出现的次数;
  • 文件:
  • 思路:

    先将字符串进行读取,然后按照空格分割['key', 'key'],在进行分割后的数组重组为(key, 1) 的形式,后面利用rdd的reduceByKey方法,将分组后的key,进行聚合操作,因为value都是1,所以可以得出对单词出现的次数,进行统计操作;

  • 根据 (key, 1) 重组后的数据应该是:

    [('key1', 1), ['key1', 1], ('key2', 1), ['key2', 1]]

  • 然后得出最终结果:
    from pyspark import SparkConf, SparkContext
    import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)# 1.读取数据文件"""假设你有一个大文件,里面有 300MB 的数据,如果你指定分区数为 3,Spark 会尝试将这个文件分成 3 个分区,每个分区大约 100MB。如果你的集群有 3 个节点,每个节点可以并行处理一个分区,这样就可以更快地完成任务。"""file = sc.textFile("word", 3)  # ("xx" , 3):3是指文件被分成的最小分区数(partitions)# 2.将所有单词读取出来words = file.flatMap(lambda line: line.split(' '))  # 结果:['python', 'java', ...]# 3.将所有单词加1做valueword_one = words.map(lambda x: (x, 1))  # 结果:[('python', 1), ('java', 1), ('php', 1), ('c#', 1),...]# 4.分组并求和result = word_one.reduceByKey(lambda a, b: a + b)# 5.打印结果print(result.collect())

7. PySpark:RDD对象数据计算(二)

7.1 RDD的filter方法:传入T泛型数据,返回bool,为false 的数据丢弃,为true的数据保留;(函数对RDD数据逐个处理,得到True的保留至返回值的RDD中)

  • 功能:过滤想要的数据进行保留;
  • filter算子作用:
    • 接受一个处理函数,可用lambda快速编写;
    • 函数对RDD数据逐个处理,得到True的保留至返回值的RDD中;
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize([1, 2, 3, 4, 5])# 保留基数print(rdd.filter(lambda x: x % 2 == 1).collect())

7.2 RDD的distinct方法:对RDD数据进行去重,返回新RDD;
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize([1, 1, 2, 3, 4, 5, 4, 5])# 对rdd对象进行去重print(rdd.distinct().collect())

7.3 RDD的sortBy方法:对RDD的容器按照指定规则排序,返回新RDD;
  • func: (T) → U告知按照rdd中的哪个数据进行排序,比如lambda x: x[1] 表示按照rdd中的第二列元素进行排序;
  • numPartitions:目前默认就为1;

结果:

按照元组tople中的第二位元素进行排序,按照降序;

lambda x: x[1]:计算规则,将所有容器的每一个元素按照函数规则处理,x是遍历的元组,x[1]是传入的元组的第二位元素,所以规则就是按照元组的第二位元素进行降序排序;

from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)rdd = sc.parallelize([("zhangSan", 99), ("lisi", 88), ("wangWu", 100)])# 对结果进行排序final_rdd = rdd.sortBy(lambda x: x[1], ascending=False, numPartitions=1)print(final_rdd.collect())

  • sortBy算子小结:
    • 接收一个处理函数,可用lambda快速编写;
    • 函数表示用来决定排序的依据;
    • 可以控制升序或降序;
    • 全局排序需要设置分区数为1;

8. 数据计算案例(二):计算城市中的商品以及销售额

8.1 需求
  1. 需求一:各个城市销售额排名,从大到小;

    先按行读取文件,并对json进行split分割,按照|符号,得到最终的字典,使用Spark.reduceByKey进行分组,分组时传递func计算函数,将所有分组后的城市销售额进行a+b的形式,聚合起来,最终得到结果,并按照降序的排序方式排序输出;

  2. 需求二:全部城市,有哪些商品类别在售卖;

    文件读取后,将城市的categpry商品类别,distinct使用去重;

  3. 需求三:北京市有哪些商品类别在售卖;

    将除了北京市的所有数据进行filter过滤,过滤后只留下category并进行去重得到结果;

8.2 文件数据

{"id":1,"timestamp":"2024-06-01T01:03.00Z","category":"电脑","areaName":"杭州","money":"3000"}|{"id":2,"timestamp":"2024-06-01T01:03.00Z","category":"电脑","areaName":"杭州","money":"3500"}
{"id":3,"timestamp":"2024-06-01T01:03.00Z","category":"食品","areaName":"杭州","money":"3000"}|{"id":4,"timestamp":"2024-06-01T01:03.00Z","category":"食品","areaName":"杭州","money":"3700"}
{"id":5,"timestamp":"2024-06-01T01:03.00Z","category":"服饰","areaName":"北京","money":"3000"}|{"id":6,"timestamp":"2024-06-01T01:03.00Z","category":"服饰","areaName":"北京","money":"3900"}
8.3 需求一实现:处理结果自动返回的是一个二元元组;
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)# 1.读取文件得到RDDfile_rdd = sc.textFile("orders")# 2. 取出一个个JSON字符串json_str_rdd = file_rdd.flatMap(lambda x: x.split("|"))# 3. 将一个个JSON字符串转换为字典dict_rdd = json_str_rdd.map(lambda x: json.loads(x))# print(dict_rdd.collect())# 4.取出城市和销售额数据city_with_money_rdd = dict_rdd.map(lambda x: (x['areaName'], int(x['money'])))# 5.按城市分组按销售额聚合city_result_rdd = city_with_money_rdd.reduceByKey(lambda a, b: a + b)# 6.按销售额聚合结果进行排序result_rdd = city_result_rdd.sortBy(lambda x: x[1], ascending=False, numPartitions=1)print("需求1的结果:", result_rdd.collect())

前三步数据结果:

完整数据结果:

8.4 需求二实现:将字典中的数据处理,返回一个list;
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)# 1.读取文件得到RDDfile_rdd = sc.textFile("orders")# 2. 取出一个个JSON字符串json_str_rdd = file_rdd.flatMap(lambda x: x.split("|"))# 3. 将一个个JSON字符串转换为字典dict_rdd = json_str_rdd.map(lambda x: json.loads(x))# 4.取出全部的商品类别category_rdd = dict_rdd.map(lambda x: x['category']).distinct()print("需求2的结果:", category_rdd.collect())

8.5 需求三实现:过滤除北京的数据,并只返回一个参数category,是list列表,并进行去重,去重后的结果进行collect输出;
from pyspark import SparkConf, SparkContext
import osif __name__ == '__main__':os.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc = SparkContext(conf=conf)# 1.读取文件得到RDDfile_rdd = sc.textFile("orders")# 2. 取出一个个JSON字符串json_str_rdd = file_rdd.flatMap(lambda x: x.split("|"))# 3. 将一个个JSON字符串转换为字典dict_rdd = json_str_rdd.map(lambda x: json.loads(x))# 4. 过滤北京的数据beijing_data_rdd = dict_rdd.filter(lambda x: x['areaName'] == '北京')# 5.取出全部商品类别result_rdd = beijing_data_rdd.map(lambda x: x['category']).distinct()print("需求3的结果:", result_rdd.collect())

9. 将RDD的结果数据输出为Python对象的各类方法

  • 数据输出:将RDD输出的值转成文件或Python对象;
  • collect算子:将各个分区内的数据,统一收集到Driver中,形成一个list对象;
  • reduce算子:对RDD数据集按照你传入的逻辑进行聚合;
  • task算子:取出RDD的前N个元素,组合成list返回;
  • count算子:计算RDD有多少条数据,返回值是一个数字;
from pyspark import SparkConf, SparkContext
import osos.environ['PYSPARK_PYTHON'] = 'C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe'
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")
sc = SparkContext(conf=conf)if __name__ == '__main__':rdd = sc.parallelize([1, 2, 3, 4, 5])# collect算子,输出RDD为list对象rdd_list: list = rdd.collect()print("collect算子结果:", rdd_list)print("collect算子类型是:", type(rdd_list))# reduce算子,对RDD进行两两聚合num = rdd.reduce(lambda a, b: a + b)print("reduce算子结果:", num)# take算子,取出RDD前N个元素,组成list返回take_list = rdd.take(3)print("take算子结果:", take_list)# count,统计rdd内有多少条数据,返回值为数字num_count = rdd.count()print("count算子结果:", num_count)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关计算素数的算法

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝黑暗的笼罩更会凸显光明的可贵! 一、引言 什么是素数 素数,也被称为质数,是指在大于1的自然数中,只能被1和它本身…

[Shell编程学习路线]——for循环应用技巧 语法和案例

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月20日16点21分 🀄️文章质量:96分 目录 ————前言———— for 循环语句 基本结构 图示原理…

【启明智显产品分享】Model3工业级HMI芯片详解系列专题(三):安全、稳定、高防护

芯片作为电子设备的核心部件,,根据不同的应用领域被分为不同等级。工业级芯片适用于工业自动化、控制系统和仪器仪表等领域,对芯片的安全、稳定、防护能力等等有着较高的要求。这些芯片往往需要具备更宽的工业温度范围,能够在更恶…

分布式锁三种方案

基于数据库的分布式锁(基于主键id和唯一索引) 1基于主键实现分布式锁 2基于唯一索引实现分布式锁 其实原理一致,都是采用一个唯一的标识进行判断是否加锁。 原理:通过主键或者唯一索性两者都是唯一的特性,如果多个…

抉择与未来:高考后专业与学校的深度选择思考

引言 随着2024年高考的尘埃落定,数百万考生及其家庭正面临一个至关重要的决策:在有限的分数条件下,是优先选择专业还是学校?这一选择不仅影响着个人的未来职业道路,也关系到大学生活的质量和个人综合素质的培养。本文将…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…

openEuler搭建hadoop Standalone 模式

Standalone 升级软件安装常用软件关闭防火墙修改主机名和IP地址修改hosts配置文件下载jdk和hadoop并配置环境变量配置ssh免密钥登录修改配置文件初始化集群windows修改hosts文件测试 1、升级软件 yum -y update2、安装常用软件 yum -y install gcc gcc-c autoconf automake…

【APP_汽修宝】数据采集案例APP_数据解密分析

如果不会写代码&#xff0c;那就出书、写博客、做视频、录播客。 &#x1f4da; S35赛季末王者昭君罗 关键代码定位 使用方法【逆向-快速定位关键代码】通过hook常用函数HashMap方法 动态分析 下面是我们通过访问目标页面时 Frida hook 捕获HashMap的调…

Linux下手动修改服务器时间(没网环境下)

在客户服务器上更新程序时&#xff0c;发现服务器时间不对&#xff0c;现在应该是下午13:44:00&#xff0c;但服务器却显示为&#xff1a;21:40:53&#xff0c;所有是不对的。 date解决办法&#xff1a; 1、由于服务器是没有网的&#xff0c;只能手动设置时间&#xff0c;输入…

idea-Spring框架与ioc容器

Sping是轻量级的开源J2EE框架&#xff0c;可以解决企业应用开发的复杂性 Spring有两个核心部分为Ioc和AOP Ioc:控制反转&#xff0c;吧创建对象过程交给Sping进行管理 AOP:面向切面&#xff0c;不修改代码进行功能增强 创建Maven项目 IDEA-2024 就直接创建java项目即可 创…

Android WebSocket长连接的实现

一、为什么需要 WebSocket 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a;通信只能由客…

SpringBoot引入外部依赖包

将需要引入的文件放置到与src同级别的目录下 如上&#xff0c;在src的同级&#xff0c;新建了一个lib目录&#xff0c;将jar包放置其中 在POM文件下&#xff0c;加入如下配置 <dependency><groupId>com.aliyun</groupId><artifactId>com.aliyun.filed…

搭建取图系统app源码开发,满足广泛应用需求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 图片已成为信息传递的重要媒介&#xff0c;广泛应用于各个领域。为满足日益增长的图片需求&#xff0c;搭建一款高效的取图系统&#xff0c;可以为用户提供便捷、全面的…

windows服务器下jenkins c语言打包的一些经验share

前言 因为一些原因&#xff0c;需要从linux环境下的jenkins 打包c语言转移到使用windows环境下的jenkins打包c语言&#xff0c;从转移的过程中&#xff0c;发现了一些问题和解决方案&#xff0c;故在此和各位运维工程师分享一下。 一、windows 下的c语言编译环境配置 这边就…

中国最全的hive sql 函数集合(持续更新)

#6/20/24 增加greatest函数&#xff1a; select greatest(1,2,3,4,5,2) 结论&#xff1a;可以用hive presto spark得出正确的结果值 #6/20/24 增加last_value(cl1) ignore nulls over(order by ts ) as dt 函数&#xff1a; 有数据集&#xff1a; 1 1 1 2 2   3 3 …

模拟算法:代码世界的生活模拟器

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 模拟算法的总结 二. 模拟算法题目 2.1 替换所有的问号 2.2 提莫攻击 2.3 Z字形变换 2.4 外观数列 2.5 数青蛙 总结 前言 本篇详细介绍了模拟算法的使用&#xff0c;让…

自动化办公04 使用pyecharts制图

目录 一、柱状图 二、折线图 三、饼图 四、地图 1. 中国地图 2. 世界地图 3. 省会地图 五、词云 Pyecharts是一个用于数据可视化的Python库。它基于Echarts库&#xff0c;可以通过Python代码生成各种类型的图表&#xff0c;如折线图、柱状图、饼图、散点图等。 Pyecha…

【腾讯云智笔试题——分苹果时间复杂度和空间复杂度都是O(1)】

文章目录 题目描述解题思路&#xff1a;思路讲解&#xff1a; 题目描述 有m个苹果&#xff0c;n个小孩。每个小孩都有一个编号&#xff0c;小明的编号是。要尽量公平的分苹果&#xff0c;相邻编号的小孩分到的苹果数目差距不能大于1。 请问如何在满足相邻编号的小孩分到的苹果…

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…

【0基础学爬虫】爬虫基础之自动化工具 Appium 的使用

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…