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

阿佑今天给大家带来个一张藏宝图——使用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的内部原理非常有帮助。

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

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

相关文章

Flutter-加载中动画

效果 考察内容 AnimationControllerTweenAnimatedBuilderTransformMatrix4 实现 ///源码&#xff1a;https://github.com/yixiaolunhui/flutter_xy class LoadingView extends StatefulWidget {const LoadingView({Key? key}) : super(key: key);overrideState<LoadingV…

AI算法-高数5-线性代数1-基本概念、向量

线性代数&#xff1a;主要研究1、张量>CV计算机视觉 2、研究张量的线性关系。 深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络&#xff0c;然而神经网络最基本的数据结构就是向量和矩阵&#xff0c;神经网络的输入是向量&#xff0c;然后通过每个矩阵对向量…

Vue3项目打包部署到云服务器的Nginx中

文章目录 一、打包vue3项目二、dist文件夹上传到服务器三、改nginx配置文件Docker安装nginx 一、打包vue3项目 npm run build 二、dist文件夹上传到服务器 将dist文件夹放到docker安装的nginx中的html目录下 三、改nginx配置文件 然后重启nginx【改了配置文件重启nginx才能…

Cloudflare国内IP地址使用教程

Cloudflare国内IP地址使用教程 加速网站&#xff1a; 首先我们添加一个 A 记录解析&#xff0c;解析 IP 就是我们服务器真实 IP&#xff1a; 然后侧边栏 SSL/TLS - 自定义主机名&#xff1a; 回退源这里填写你刚刚解析的域名&#xff0c;保存后回退源状态为有效再来接下的操作…

C++ 指针 参数 静态 常 友元与组合概念

一 类类型作为函数参数 1 类类型作参数类型的三种方式 1&#xff09; 对象本身作为参数 由于C采用传值的方式传递参数&#xff0c;因此使用对象本身参数时&#xff0c;形参是实参的一个拷贝。在这种情况下&#xff0c;最好显式地为类定义一个拷贝构造函数&#xff0c;以免出…

二维费用背包分组背包

二维费用背包&分组背包 一定要做的

[Spring Cloud] (7)gateway防重放拦截器

文章目录 简述本文涉及代码已开源Fir Cloud 完整项目防重放防重放必要性&#xff1a;防重放机制作用&#xff1a; 整体效果后端进行处理 后端增加防重放开关配置签名密钥 工具类防重放拦截器 前端被防重放拦截增加防重放开关配置请求头增加防重放签名处理防重放验证处理函数bas…

HC-06 蓝牙串口从机 AT 命令详解

HC-06 蓝牙串口从机 AT 命令详解 要使用 AT 命令&#xff0c;首先要知道 HC-06 的波特率&#xff0c;然后要进入 AT 命令模式。 使用串口一定要知道三要素&#xff0c;一是波特率&#xff0c;二是串口号&#xff0c;三是数据格式, HC-06只支持一种数据格式: 数据位8 位&#…

MYSQL数据库-SQL语句

数据库相关概念 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准Structured Quer…

第十四篇:数据库设计精粹:规范化与性能优化的艺术

数据库设计精粹&#xff1a;规范化与性能优化的艺术 1. 引言 1.1 数据库设计在现代应用中的核心地位 在数字化的浪潮中&#xff0c;数据库设计如同建筑师手中的蓝图&#xff0c;是构建信息大厦的基石。它不仅关乎数据的存储与检索&#xff0c;更是现代应用流畅运行的生命线。…

打印图形(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, j;//循环打印&#xff1b;for (i 0; i < 5; i){//列&#xff1b;for (j 0; j &…

Python深度学习基于Tensorflow(9)注意力机制

文章目录 注意力机制是怎么工作的注意力机制的类型 构建Transformer模型Embedding层注意力机制的实现Encoder实现Decoder实现Transformer实现 注意力机制的主要思想是将注意力集中在信息的重要部分&#xff0c;对重要部分投入更多的资源&#xff0c;以获取更多所关注目标的细节…

关于Speech processing Universal PERformance Benchmark (SUPERB)基准测试及衍生版本

Speech processing Universal PERformance Benchmark &#xff08;SUPERB&#xff09;是由台湾大学、麻省理工大学&#xff0c;卡耐基梅隆大学和 Meta 公司联合提出的评测数据集&#xff0c;其中包含了13项语音理解任务&#xff0c;旨在全面评估模型在语音处理领域的表现。这些…

贝叶斯分类器详解

1 概率论知识 1.1 先验概率 先验概率是基于背景常识或者历史数据的统计得出的预判概率&#xff0c;一般只包含一个变量&#xff0c;例如P(A)&#xff0c;P(B)。 1.2 联合概率 联合概率指的是事件同时发生的概率&#xff0c;例如现在A,B两个事件同时发生的概率&#xff0c;记…

Hotcoin Research | 市场洞察:2024年5月6日-5月12日

加密货幣市场表现 加密货幣总市值为1.24万亿&#xff0c;BTC占比53.35%。 本周行情呈现先涨后跌的一种態势&#xff0c;5月6日-9日大盘持续下跌&#xff0c;周末为震荡行情。本周的比特幣现货ETF凈流入&#xff1a;1.1262亿美元&#xff0c;其中&#xff1a;美国ETF流入&…

Google与哈佛大学的科学家团队共同创造了一张人脑中一个极小部分的精细地图

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Linux重定向及缓冲区理解

重定向&#xff1a; 在上一期虚拟文件系统中讲到了每个进程在打开后&#xff0c;都会默认打开3个文件&#xff0c;如下&#xff1a; stdin 标准输入&#xff08;键盘&#xff09; 文件描述符&#xff1a;0 stdout 标准输出&#xff08;显示器&#xff09;文件描述符&a…

C++组合类

类的数据成员不但可以是基本类型&#xff0c;也可以是其它类的对象。 组合类就是指一个类包含其他类的对象作为该类的数据成员。 当组合类创建对象时&#xff0c;其中包含的各个数据成员对象应首先被创建。因此&#xff0c;在创建类的对象时&#xff0c;既要对本类的基本…

贪吃蛇(c实现)

目录 游戏说明&#xff1a; 第一个是又是封面&#xff0c;第二个为提示信息&#xff0c;第三个是游戏运行界面 游戏效果展示&#xff1a; 游戏代码展示&#xff1a; snack.c test.c snack.h 控制台程序的准备&#xff1a; 控制台程序名字修改&#xff1a; 参考&#xff1a…

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整&#xff0c;您需要登录到iDRAC的Web界面。以下是详细的步骤&#xff1a; 登录iDRAC&#xff1a;在浏览器中输入iDRAC的IP地址&#xff0c;然后使用用户名&#xff08;通常是“root”&#xff09;和密码登录。 导航到虚拟控制台&#xff…