告别数据泥潭:PySpark性能调优的黄金法则

news2024/11/29 20:47:59

阿佑今天给大家带来个一张藏宝图——使用PySpark进行性能调优的黄金法则,从内存管理到执行计划,再到并行度设置,每一步都是提升数据处理速度的关键!

文章目录

  • Python Spark 详解
    • 1. 引言
    • 2. 背景介绍
      • 2.1 大数据处理技术演变
      • 2.2 Apache Spark简介
      • 2.3 PySpark概述
    • 3. PySpark基础
      • 3.1 安装与环境配置
      • 3.2 SparkContext与SparkSession
      • 3.3 RDD操作
    • 4. PySpark高级功能
      • 4.1 DataFrame与SQL查询
      • 4.2 数据处理与分析
      • 4.3 机器学习库MLlib
      • 4.4 流处理:Structured Streaming
    • 5. PySpark性能优化与调优
      • 5.1 内存管理与调优
      • 5.2 执行计划与资源分配
      • 5.3 并行度与任务调度
    • 6. PySpark在实际项目中的应用案例
      • 6.1 大规模数据处理案例
      • 6.2 实时数据分析
      • 6.3 机器学习应用
    • 7. 结论
      • 回顾PySpark的核心价值与应用范围
      • 展望PySpark在大数据与AI领域的前景
    • 参考文献
      • 官方文档链接
      • 关键书籍推荐
      • 相关研究论文与博客文章
      • 在线课程与教程

Python Spark 详解

1. 引言

在当今这个信息爆炸的时代,我们每天都在产生海量的数据。想象一下,当你走进超市,拿起一瓶饮料,这个简单的动作可能就被摄像头捕捉下来,成为数据的一部分。再比如,当你在网上浏览新闻,点击广告,你的浏览习惯和偏好也在无声无息中被记录。这些数据,如果能够被有效地收集和分析,就能为我们的生活和工作带来巨大的价值。

但是,大数据处理并不是一件容易的事。数据量巨大,类型多样,处理速度要求高,这些都是挑战。就像是一位厨师面对着堆积如山的食材,想要做出一桌色香味俱全的佳肴,没有一把好刀和一套精湛的厨艺是不行的。

这时候,Apache Spark 出现了,它就像是一位技艺高超的厨师,能够快速、高效地处理这些数据。而PySpark,作为Spark的Python接口,更是让这把“刀”更加锋利,让数据的处理变得更加简单和直观。

接下来,让我们一起走进这个大数据的世界,探索PySpark的奥秘吧!

2. 背景介绍

2.1 大数据处理技术演变

在大数据的江湖里,曾经有一位霸主,名叫Hadoop。它以其强大的分布式文件系统HDFS和MapReduce编程模型,一度成为大数据处理的代名词。但随着时间的推移,人们发现MapReduce虽然在批处理大数据方面表现出色,但在面对需要实时处理和更复杂计算的场景时,就显得有些力不从心了。

这时,Apache Spark横空出世,它以其创新的内存计算能力和灵活的数据处理能力,迅速赢得了人们的青睐。Spark不仅能够处理大规模的批处理任务,还能够轻松应对实时数据流的处理,以及复杂的数据聚合和交互式查询。这就像是从一把沉重的斧头进化到了一把多功能的瑞士军刀,让数据处理变得更加得心应手。

2.2 Apache Spark简介

Apache Spark的核心概念是围绕着三个核心抽象构建的:RDD(弹性分布式数据集)、DataFrame和Dataset。

  • RDD:它是Spark的基本抽象,代表了一个不可变、分布式的数据集合,可以通过一系列的并行操作进行转换和行动。
  • DataFrame:是建立在RDD之上的一个更高级的抽象,提供了结构化的数据操作,类似于SQL表。它使得对结构化数据的处理变得更加简单。
  • Dataset:是DataFrame的进化版,它结合了RDD的强类型和DataFrame的结构化,提供了更优化的性能和更强大的类型安全。

2.3 PySpark概述

而当我们谈论PySpark时,我们实际上是在谈论如何将Python语言的强大功能与Spark的数据处理能力结合起来。Python以其简洁的语法和丰富的库,已经成为数据科学家和开发者的首选语言。PySpark的出现,让这些用户能够无缝地使用他们熟悉的Python语言,来操作和分析大规模的数据集。

通过PySpark,我们可以使用Python的简洁语法来创建RDD、DataFrame和Dataset,执行复杂的数据转换和分析任务,而无需深入了解底层的分布式计算细节。这就像是给瑞士军刀装上了一个智能芯片,让它不仅功能强大,而且更加易于使用。


在这一章节中,我们简要介绍了大数据处理技术的演变,Apache Spark的核心概念,以及PySpark如何将Python的便捷性与Spark的强大数据处理能力结合起来。接下来,我们将深入探讨PySpark的基础知识,包括安装、环境配置以及如何使用SparkContext与SparkSession

在这里插入图片描述

3. PySpark基础

3.1 安装与环境配置

想象一下,你刚买了一套全新的厨具,准备在厨房大展身手。但在开始烹饪前,你需要先安装好这些工具,调整好火候,这正是我们使用PySpark前需要做的准备工作。

安装PySpark就像是安装新软件一样简单。如果你使用的是Anaconda,PySpark通常已经包含在内。否则,你可以通过pip安装:

pip install pyspark

安装完成后,配置环境变量使得你可以在命令行中直接使用PySpark。这就像是调整好你的炉火,让它达到最佳烹饪温度。

3.2 SparkContext与SparkSession

现在,你的厨房已经准备就绪,是时候开始烹饪了。在PySpark中,SparkContextSparkSession就像是你的主要烹饪工具。

SparkContext是与Spark集群交互的接口,而SparkSession则是一个更高级别的API,它提供了简化的DataFrame和SQL操作。创建它们的过程就像是点燃炉火,准备开始烹饪:

from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("SparkExample") \
    .getOrCreate()

# 创建SparkContext
sc = spark.sparkContext

3.3 RDD操作

终于,我们来到了食材处理的环节。在PySpark中,RDD(弹性分布式数据集)就像是你的基本食材,它可以是任何可以并行计算的数据集合。

创建RDD就像是挑选食材,你可以选择本地的文件,或者是远在HDFS上的大数据集:

# 创建一个RDD
rdd = sc.textFile("path_to_your_data.txt")

转换操作就像是食材的预处理,比如切片、切块:

# 转换操作:将每一行数据拆分为单词
words = rdd.flatMap(lambda line: line.split(" "))

行动操作就像是开始烹饪,把处理好的食材变成最终的菜肴。比如,计算单词的总数:

# 行动操作:计算单词总数
word_count = words.count()
print("Total words: ", word_count)

通过这些基础操作,咱们已经可以开始在PySpark的厨房里烹饪出美味的数据大餐了。接下来,我们将深入探索PySpark的高级功能,让你的数据处理技艺更上一层楼。如果你准备好了,就让我们一起继续这场数据烹饪之旅吧!


4. PySpark高级功能

4.1 DataFrame与SQL查询

在PySpark的世界里,DataFrame就像是一个多才多艺的艺术家,它能够从各种不同的舞台上汲取灵感,创造出美妙的数据乐章。无论是结构化的数据库,还是半结构化的JSON文件,亦或是无结构的文本数据,DataFrame都能将它们转化为统一的格式,让数据的查询和处理变得轻松而优雅。

想象一下,你是一位厨师,面前有各种各样的食材:新鲜的蔬菜、冷冻的肉类、干货的香料。DataFrame就像你的万能料理机,不管这些食材原本是什么形态,都能帮你把它们变成你需要的样子,然后进行烹饪。

from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()

# 从CSV文件创建DataFrame
df = spark.read.csv("path_to_your_data.csv", header=True, inferSchema=True)

# 使用SQL查询DataFrame
df.createOrReplaceTempView("people")  # 创建临时视图
teenagers = spark.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")

# 展示结果
teenagers.show()

4.2 数据处理与分析

数据处理就像是烹饪过程中的调味,需要恰到好处才能让菜肴的味道达到最佳。在PySpark中,GroupBy操作就像是你的香料,能够将数据按照不同的维度进行分组,然后进行聚合操作,就像是将食材按照不同的口味进行搭配。

而Window函数则像是你的高级烹饪技巧,它能够对数据进行更加复杂的分析,比如计算移动平均值,或者是根据时间序列进行数据分析。这就像是在烹饪中加入了分子料理的元素,让数据的分析变得更加精细和创新。

from pyspark.sql import functions as F

# 对DataFrame进行分组和聚合
grouped_data = df.groupBy("category").agg(F.sum("amount").alias("total_amount"))

# 使用Window函数进行复杂数据分析
from pyspark.sql.window import Window

window_spec = Window.partitionBy("category").orderBy("date")
ranked_data = df.withColumn("rank", F.rank().over(window_spec))

# 展示排名结果
ranked_data.show()

4.3 机器学习库MLlib

在PySpark的厨房里,MLlib就像是一瓶珍贵的老酒,它能够为数据的风味增添一抹独特的香气。MLlib是Spark的机器学习库,它提供了一系列的算法和工具,让你能够轻松地构建和训练机器学习模型。

无论是简单的线性回归,还是复杂的决策树,MLlib都能够帮你实现。而且,它还提供了数据预处理和模型评估的工具,让你能够更好地调整和优化你的模型。

from pyspark.ml.regression import LinearRegression
from pyspark.ml.feature import VectorAssembler

# 数据预处理
assembler = VectorAssembler(inputCols=["feature1", "feature2"], outputCol="features")
data = assembler.transform(df)

# 构建线性回归模型
lr = LinearRegression(featuresCol="features", labelCol="label")

# 训练模型
model = lr.fit(data)

# 模型评估
evaluator = RegressionEvaluator(labelCol="label", predictionCol="prediction", metricName="rmse")
rmse = evaluator.evaluate(model.transform(data))

print("Root Mean Squared Error (RMSE) on training data = %g" % rmse)

4.4 流处理:Structured Streaming

流处理就像是烹饪中的即兴表演,它需要你对食材的新鲜度和火候有极高的掌控力。在PySpark中,Structured Streaming就是这样一种即兴表演的艺术,它能够让你实时地处理数据流,就像是在烹饪中对食材进行即时处理。

通过Structured Streaming,你可以创建实时数据处理的应用程序,对数据进行实时的转换和分析。而且,它还提供了输出和故障恢复机制,确保你的数据处理既高效又可靠。

from pyspark.sql import functions as F

# 创建流式DataFrame
streaming_df = spark.readStream.schema(df.schema).csv("path_to_streaming_data")

# 进行实时转换
enriched_stream = streaming_df.selectExpr("CAST(timestamp AS TIMESTAMP)", "value")

# 启动流处理
query = enriched_stream.writeStream.outputMode("append").csv("path_to_output_stream")

# 开始执行流处理
query.start().awaitTermination()

在这一章节中,咱们一块探索了PySpark的高级功能,包括DataFrame与SQL查询、数据处理与分析、机器学习库MLlib以及流处理Structured Streaming。通过这些功能,PySpark不仅能够处理大规模的批处理任务,还能够轻松应对实时数据流的处理,以及复杂的数据聚合和交互式查询。接下来,我们将通过一些实际项目中的应用案例,进一步展示PySpark的强大能力~

在这里插入图片描述

在这里插入图片描述

5. PySpark性能优化与调优

5.1 内存管理与调优

在PySpark的世界里,内存就像是我们的厨房空间,如果管理得当,就能让数据处理的“烹饪”过程更加流畅。想象一下,如果你的厨房堆满了杂物,连转身的空间都没有,那还怎么做菜呢?同样,在处理大量数据时,如果内存管理不当,就会导致频繁的垃圾回收,甚至内存溢出。

RDD的持久化策略就像是我们对厨房空间的合理规划。通过将中间结果持久化到内存或磁盘,我们可以避免重复计算,节省时间和资源。就像是把常用的调料放在容易拿到的地方,需要时可以快速取用。

from pyspark import SparkConf

conf = SparkConf().setAppName("MemoryTuning")
conf = conf.set("spark.memory.fraction", "0.8")  # 设置内存使用比例
conf = conf.set("spark.memory.storageFraction", "0.1")  # 设置内存用于存储的比例

# 创建SparkContext
sc = SparkContext(conf=conf)

Shuffle操作在Spark中是不可避免的,它就像是在厨房里准备食材时的“大混战”。但是,如果Shuffle操作不当,就会造成资源浪费和性能下降。优化Shuffle,比如通过合理设置数据分区,可以提高数据处理的效率。

# 通过repartition方法重新分区
rdd = sc.parallelize(range(1, 100), 10)  # 初始分区数为10
rdd = rdd.repartition(20)  # 增加分区数以优化Shuffle

5.2 执行计划与资源分配

Spark UI就像是我们的厨房监控器,它能够实时地展示出当前的数据处理状态,让我们对整个“烹饪”过程了如指掌。通过Spark UI,我们可以分析执行计划,找出性能瓶颈。

资源配置和动态分配就像是对厨房设备的合理分配。通过合理配置Executor的数量、内存大小以及核心数,我们可以确保数据处理既不会因为资源不足而受限,也不会因为资源浪费而造成不必要的开销。

# 设置资源配置
conf = conf.setExecutorMemory("4g")  # 设置Executor内存为4GB
conf = conf.set("spark.executor.cores", "2")  # 设置每个Executor使用2个核心

5.3 并行度与任务调度

并行度的设置就像是我们决定一次炒几个菜。如果并行度太高,就像是一次炒太多菜,可能会导致手忙脚乱,而且有些菜可能会因为火候掌握不当而炒糊。反之,如果并行度太低,就像是一次只炒一个菜,效率就会很低。

任务调度策略就像是我们的炒菜顺序。通过优化任务调度,比如使用延迟调度或优先级调度,我们可以确保关键任务优先执行,从而提高整体的数据处理效率。

# 设置并行度
rdd = sc.parallelize(range(1, 100), 10)  # 设置并行度为10

# 使用任务调度策略
conf = conf.set("spark.locality.wait", "3s")  # 设置本地数据本地处理的等待时间

小结: 我们探讨了PySpark性能优化与调优的三个关键方面:内存管理与调优、执行计划与资源分配、并行度与任务调度。通过这些调优技巧,我们可以确保PySpark在处理大规模数据时既高效又稳定!

6. PySpark在实际项目中的应用案例

6.1 大规模数据处理案例

想象一下,你是一家大型电商公司的数据分析员,面对着海量的交易数据,你的任务是要从这些数据中提取有价值的信息,比如识别出最受欢迎的商品、预测未来的销售趋势等。这就像是要在一座巨大的矿山中挖掘出闪闪发光的金子。

使用PySpark,你可以轻松地对这些大规模数据进行ETL(提取、转换、加载)操作。比如,你可以使用Spark SQL来清洗数据,使用DataFrame API来转换数据,最后将处理后的数据加载到数据仓库中。

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# 创建SparkSession
spark = SparkSession.builder.appName("DataETL").getOrCreate()

# 读取原始交易数据
df = spark.read.csv("path_to_transaction_data.csv", header=True, inferSchema=True)

# 数据清洗:去除空值和异常值
cleaned_df = df.na.drop().filter(col("amount") > 0)

# 数据转换:计算每个商品的总销售额
sales_df = cleaned_df.groupBy("product_id").agg({"amount": "sum"}).rename(columns={"sum(amount)": "total_sales"})

# 将处理后的数据写入数据仓库
sales_df.write.mode("overwrite").parquet("path_to_data_warehouse")

6.2 实时数据分析

现在,让我们把场景切换到一个实时监控系统。假设你负责监控一个大型网站的访问情况,需要实时地分析访问日志,以便于及时发现并处理异常流量。

使用PySpark的Structured Streaming,你可以构建一个实时数据处理的管道,对访问日志进行实时的聚合和分析。

from pyspark.sql import functions as F

# 创建流式DataFrame,读取Kafka中的数据
streaming_df = spark.readStream.schema(df.schema).kafka("topic_name")

# 实时聚合:计算每分钟的访问次数
minutely_counts = streaming_df.groupBy(F.window("timestamp", "1 minute"), "page_id").agg({"visits": "count"})

# 将结果输出到控制台,也可以输出到其他系统
query = minutely_counts.writeStream.outputMode("complete").format("console").start()

query.awaitTermination()

6.3 机器学习应用

最后,让我们看看如何使用PySpark的MLlib库来构建一个推荐系统。推荐系统在电商、视频平台、新闻网站等领域都有着广泛的应用。通过分析用户的浏览和购买历史,推荐系统可以向用户推荐他们可能感兴趣的商品或内容。

from pyspark.ml.recommendation import ALS
from pyspark.sql import Row

# 准备数据:用户-商品评分矩阵
ratings = [(1, 1, 5.0), (2, 2, 3.0), (1, 2, 3.0)]
ratings_rdd = sc.parallelize(ratings)
ratings_df = ratings_rdd.map(lambda x: Row(userId=x[0], productId=x[1], rating=x[2])).toDF()

# 构建ALS模型
als = ALS(maxIter=5, regParam=0.01, userCol="userId", itemCol="productId", ratingCol="rating", coldStartStrategy="drop")

# 训练模型
model = als.fit(ratings_df)

# 为用户推荐商品
user_recs = model.recommendForAllUsers(5)
product_recs = model.recommendForAllItems(5)

# 展示推荐结果
user_recs.show()
product_recs.show()

在这一章节中,我们通过三个实际的应用案例,展示了PySpark在大规模数据处理、实时数据分析和机器学习应用中的强大能力。从数据的ETL操作,到实时的数据处理和分析,再到构建推荐系统,PySpark都能提供简单、高效、灵活的解决方案。这些案例只是PySpark应用的冰山一角,实际上,PySpark的应用范围远不止这些。如果您对PySpark的其他应用感兴趣,或者有任何问题,请随时告知。
在这里插入图片描述

7. 结论

随着我们对PySpark的探索之旅即将画上句号,就像一部精彩的剧集迎来大结局,我们不禁要回顾一下,PySpark这位主角给我们带来了哪些精彩的表现和深刻的启示。

回顾PySpark的核心价值与应用范围

PySpark不仅仅是一个数据分析的工具,它更像是一位多才多艺的艺术家,能够在大数据的舞台上,演奏出各种动听的乐章。从大规模数据的批处理到实时数据的流处理,从简单的数据转换到复杂的机器学习模型,PySpark都能游刃有余。

它的核心价值在于:

  • 易用性:Python语言的简洁和强大,让PySpark易于上手,同时保持了高效的数据处理能力。
  • 灵活性:支持多种数据操作和分析方式,无论是批处理还是流处理,都能灵活应对。
  • 高效性:内存计算和优化的执行引擎,让PySpark在处理大规模数据时表现出色。
  • 扩展性:丰富的库支持,如SQL、MLlib和Structured Streaming,让PySpark能够轻松扩展到不同的应用场景。

展望PySpark在大数据与AI领域的前景

展望未来,PySpark在大数据和人工智能领域的应用前景非常广阔。随着数据量的不断增长和计算能力的提升,PySpark将在以下几个方面发挥更大的作用:

  1. 实时数据处理:随着物联网(IoT)设备的普及,实时数据流的处理需求将持续增长,PySpark的Structured Streaming将在这一领域扮演重要角色。
  2. 机器学习与深度学习:PySpark与机器学习库MLlib的结合,以及与深度学习框架的集成,将使得构建和部署机器学习模型变得更加容易。
  3. 跨平台与云服务:PySpark的跨平台特性和对云服务的支持,将使其在多云和混合云环境中发挥更大的作用。
  4. 数据科学教育:由于Python语言在教育领域的普及,PySpark也将成为数据科学教育的重要工具。

随着技术的不断进步,PySpark也将继续进化,带来更多令人激动的新特性和优化。


最后,咱们不仅总结了PySpark的核心价值和应用范围,还展望了它在大数据与AI领域的未来。PySpark的故事还在继续,而每一位使用PySpark的开发者、数据科学家和分析师,都将成为这个故事的续写者!如果你对PySpark有更多想要探索的地方,或者希望在实际项目中应用PySpark,那么现在就是你拿起这把“瑞士军刀”,开始你的大数据之旅的最佳时机。

如果你对PySpark有任何疑问,或者想要了解更多关于大数据和机器学习的有趣话题,请随时评论区与阿佑交流。阿佑期待着与你一起,探索数据的无限可能!!!

参考文献

官方文档链接

  1. Apache Spark 官方文档
    https://spark.apache.org/docs/latest/
    Apache Spark的官方文档是学习PySpark的基础,提供了从安装到高级使用的全面指南。

  2. PySpark 官方Python文档
    https://spark.apache.org/docs/latest/api/python/index.html
    这里是PySpark的Python API文档,详细描述了各个模块和函数的使用方法。

关键书籍推荐

  1. 《Python for Data Analysis》
    作者: Wes McKinney
    出版社: O’Reilly Media
    这本书虽然不是专门针对PySpark的,但它介绍了使用Python进行数据分析的基础知识,对理解PySpark的数据操作非常有帮助。

  2. 《Learning Spark》
    作者: Holden Karau, Andy Konwinski, Patrick Wendell, Ryan Cox
    出版社: O’Reilly Media
    这本书提供了对Apache Spark的全面介绍,包括PySpark的使用,适合初学者和有经验的开发者。

  3. 《Advanced Analytics with Spark》
    作者: Joseph Bradley, Martin Anderson, Ted Dunning, Ellen Friedman
    出版社: O’Reilly Media
    针对已经具备一定Spark知识的读者,深入探讨了使用Spark进行高级分析的技术和案例。

相关研究论文与博客文章

  1. “A Survey of Machine Learning for Big Data Processing Platforms”
    作者: Muhammad Intizar Ali, Muhammad Usama, Muhammad Imran
    发表在《IEEE Access》上,这篇论文提供了对大数据平台机器学习技术的综述,包括对Spark MLlib的讨论。

  2. “Efficient Data Processing on Hadoop and Spark”
    作者: Holden Karau
    这篇博客文章由Databricks的联合创始人撰写,讨论了在Hadoop和Spark上进行高效数据处理的技巧。

  3. “Real-time Analytics with Apache Spark”
    作者: Sandy Ryza, Uri Laserson, Sean Owen, Josh Wills
    这篇博客文章详细介绍了使用Spark进行实时数据分析的方法,适合想要探索Structured Streaming的读者。

在线课程与教程

  1. Databricks 的 Apache Spark 教程
    https://docs.databricks.com/
    Databricks提供了丰富的Apache Spark教程,涵盖了从基础到高级的多个方面。

  2. Coursera 上的 “Scala and Spark for Big Data”
    https://www.coursera.org/specializations/scala-spark-big-data
    由加州大学伯克利分校提供的课程,虽然侧重于Scala,但对理解Spark的内部原理非常有帮助。

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

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

相关文章

小猫咪邮件在线发送系统源码,支持添加附件

一款免登录发送邮件&#xff0c;支持发送附件&#xff0c;后台可添加邮箱,前台可选择发送邮箱 网站数据采取本地保存&#xff0c;所以使用前请给网站修改权限&#xff0c;否则很多功能将无法使用 安装教程&#xff1a; 1.上传服务器或者主机 2.登录后台&#xff0c;添加发送…

胆子真大,敢搞B站

今天给大家分享一款浏览器插件&#xff0c;能让你的B站在电脑端访问时候会更高级 作者已经开源到Github Star数量还在持续上升中 来看下这款插件究竟具备哪些功能 首先是开启首页干净模式&#xff0c;也就是去除大屏 正常情况我们访问B站是这个样子的~ 开启总开关后 首页的视…

【笔记】从零开始做一个男性人体的流程/躯干篇(超级详细)

躯干整体 大体 1.创建一个正方体&#xff0c;摆好位置 2.实例呀啥的都搞好 3.胸部它是一个前窄后宽的结构 斜方肌 臀部 1.臀部是前宽后窄的结构 2.我们再去侧面调整以下 胸椎向上倾斜&#xff0c;盆骨向下倾斜。脊椎是s形的 3.真实的身体没有这么方正&#xff0c;所以微调…

Adobe Premiere Pro安装

一、安装包下载 链接&#xff1a;https://pan.baidu.com/s/1aYqTSQQutDguKYZE-yNHiw?pwd72l8 提取码&#xff1a;72l8 二、安装步骤 1.鼠标右击【Pr2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Pr2024(64bit)】。 2.打开…

双向链表(双向带头循环)的增删查改的实现(简单易懂)

一&#xff1a;双向链表的概念 每个节点除开存有数据&#xff0c;还有一个指针指向前一个节点&#xff0c;一个指针指向后一个节点&#xff0c;尾节点和哨兵位互相指向&#xff0c;从而形成一个循环。 二&#xff1a;双向链表的实现第一点&#xff1a; 本文采用三个文件进行实…

Kexp 动态展示 k8s 资源对象依赖关系

kexp[1] 旨在以可视化的方式帮助用户理解和探索 Kubernetes 的能力。 适用场景&#xff1a; 学习和探索 Kubernetes 的功能。 应用开发&#xff0c;提供每个应用的对象图预设。 控制器和操作器的开发&#xff0c;支持动态对象图。 即将推出类似 Postman 的 Kubernetes API …

springboot实现文件防盗链设计

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen &#x1f44b;&#x1f44b;&#x1f44b;hello&#xff0c;伙伴们好久不见&…

《动手学深度学习》V2(11-18)

文章目录 十一、二 模型选择与过拟合和欠拟合1、模型的选择2、过拟合和欠拟合3、估计模型容量4、线性分类器的VC维5、过拟合欠拟合的代码实现 :fire:①生成数据集②定义评估损失③定义训练函数④三阶多项式函数拟合⑤线性函数拟合(欠拟合)⑤高阶多项式函数拟合(过拟合) 十三、权…

数据库脚本编写规范(SQL编写规范)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 软件开发全文档获取&#xff1a;点我获取

2024中国(重庆)VR/AR科技展8月举办

2024中国(重庆)VR/AR科技展8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 展会背景&#xff1a; 2024中国航空科普大会暨第八届全国青少年无人机大赛在重庆举办&#xff0c;同时举办第二届中国…

FPGA SDRAM读写控制器

感谢邓堪文大佬 &#xff01; SDRAM 同步动态随机存取内存&#xff08;synchronousdynamic randon-access menory&#xff0c;简称SDRAM&#xff09;是有一个同步接口的动态随机存取内存&#xff08;DRAM&#xff09;。通常DRAM是有一个异步接口的&#xff0c;这样它可以随时响…

CSS之浮动

目录 浮动常见网页布局标准流&#xff08;普通流、文档流&#xff09;为什么需要浮动什么是浮动浮动特性&#xff08;重难&#xff09;注意&#xff1a;清除浮动 浮动 常见网页布局 本质&#xff1a;用CSS来摆放盒子&#xff0c;把盒子摆放到相应的位置 三种常见布局方式&…

Java常见数据结构---八大结构

前言&#xff1a; 数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。 通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率 常见的八大数据结构&#xff1a; 栈&#xff1a; 思想&#xff1a; 栈是一种数据结构&…

Python模块之Numpy(二)-- 生成各种随机数

对于 NumPy&#xff0c;与随机数相关的函数都在 random 模块中&#xff0c;其中包括可以生成服从多种概率分布随机数的函数&#xff0c;示例如下&#xff1a; #生成10个服从0-1均匀分布的随机数 arr1 np.random.random([2,5]) #也生成10个服从0-1均匀分布的随机数 arr2 np.ra…

TMS320F280049 CLB模块--LUT4 OUTLUT(4)

LUT4 示意图如下&#xff1a; OUTLUT 示意图如下&#xff1a; 寄存器 参考文档&#xff1a; TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. G)

网络安全之OSI七层模型详解

OSI七层模型分为控制层&#xff08;前三层&#xff09;和数据层&#xff08;后四层&#xff09;。从第七层到一层为&#xff1b; 应用层&#xff08;7&#xff09;接收数据 表示层&#xff08;6&#xff09;将数据翻译为机器语言 会话层&#xff08;5&#xff09;建立虚连接…

http协议 tomcat如何访问资源 servlet理论介绍

tomcat介绍 bin是启动命令&#xff1b; conf是配置&#xff0c;可以修改端口号&#xff1b; lib是依赖的jar包&#xff1b; logs是日志 webapps是重点&#xff0c;在这里新建我们自己的javaWeb项目 tomcat如何访问资源 tomcat通过统一资源定位符&#xff08;URL&#xff09;来…

开源软件托管平台gogs操作注意事项

文章目录 一、基本说明二、gogs私有化部署三、设置仓库git链接自动生成参数四、关闭新用户注册入口 私有化部署gogs托管平台&#xff0c;即把gogs安装在我们自己的电脑或者云服务器上。 一、基本说明 系统环境&#xff1a;ubuntu 20.4docker安装 二、gogs私有化部署 前期准…

权限及权限操作

1.命令行解释器 Linux将命令行解释器称为外壳程序shell 命令行解释器的作用就是将用户输入的指令转换为操作系统能够直接执行的指令。同时将操作系统的反馈转换为用户能看懂的反馈&#xff0c;解决了用户和操作系统沟通成本的问题。与此同时&#xff0c;命令行解释器还能够拦…

环境变量(全)

概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可以链接成功&#xff0c;生成可执…