当前位置: 首页 > news >正文

如何学习Spark:糙快猛的大数据之旅

在这里插入图片描述

作为一名大数据开发者,我深知学习Spark的重要性。今天,我想和大家分享一下我的Spark学习心得,希望能够帮助到正在学习或准备学习Spark的朋友们。

目录

    • Spark是什么?
    • 学习Spark的"糙快猛"之道
      • 1. 不要追求完美,在实践中学习
      • 2. 利用大模型作为24小时助教
      • 3. 根据自己的节奏来
      • 4. 实战项目是最好的老师
    • 深入Spark:进阶学习策略
      • 1. 理解Spark的核心概念
      • 2. 拥抱Spark生态系统
      • 3. 实战驱动学习
      • 4. 性能调优:磨刀不误砍柴工
      • 5. 保持学习的激情
    • Spark高级应用:从入门到精通
      • 1. 机器学习与Spark MLlib
      • 2. 图计算与GraphX
      • 3. 性能调优进阶
      • 4. 实战案例:日志分析系统
      • 5. 保持学习和探索的态度
    • Spark在企业级应用中的实战经验
      • 1. 数据湖构建与管理
      • 2. 实时数据处理与分析
      • 3. 大规模机器学习
      • 4. 性能调优的艺术
      • 5. 与其他大数据技术的集成
    • 结语:持续学习,不断突破

Spark是什么?

image.png

首先,让我们简单了解一下Spark。Apache Spark是一个快速、通用的分布式计算系统,专为大规模数据处理而设计。它提供了高级API,支持Java、Scala、Python和R等多种编程语言,能够运行各种工作负载,包括批处理、流处理、机器学习和交互式查询等。
image.png

学习Spark的"糙快猛"之道

说到学习Spark,我想分享一个我的亲身经历。秘诀是什么?就是"糙快猛"!
image.png

1. 不要追求完美,在实践中学习

学习Spark时,不要一开始就追求完美。先快速上手,了解基本概念和操作,然后在实践中不断深化理解。比如,你可以先学习如何创建一个简单的SparkSession:

from pyspark.sql import SparkSessionspark = SparkSession.builder \.appName("MyFirstSparkApp") \.getOrCreate()# 读取一个CSV文件
df = spark.read.csv("path/to/your/file.csv", header=True, inferSchema=True)# 显示数据的前几行
df.show()# 关闭SparkSession
spark.stop()

这个简单的例子让你快速体验了Spark的基本操作。记住,不完美没关系,重要的是你迈出了第一步!

2. 利用大模型作为24小时助教

image.png

现在我们有了大模型作为24小时助教,学习效率可以大大提高。遇到问题时,可以随时向大模型提问,获取解答和建议。但要注意,大模型虽然能帮上不少忙,但还远没到能完全代劳的地步。建立自己的审美和判断力仍然很重要。

3. 根据自己的节奏来

每个人的学习节奏不同,不要盲目跟风。有人可能一周就能掌握Spark的基础,有人可能需要一个月。找到适合自己的节奏,稳步前进才是王道。
image.png

4. 实战项目是最好的老师

理论学习固然重要,但实战项目才是真正提升技能的关键。试着用Spark解决一些实际问题,比如分析一个大型数据集:
image.png

# 假设我们有一个大型的销售数据集
sales_df = spark.read.parquet("path/to/sales_data.parquet")# 按地区和产品类别统计销售额
result = sales_df.groupBy("region", "product_category") \.agg({"sales_amount": "sum"}) \"sales_amount": "sum"}) \.orderBy("region", "sum(sales_amount).desc")# 显示结果
result.show()

通过这样的实战项目,你不仅能学习Spark的API使用,还能了解如何处理大规模数据集和优化查询性能。

深入Spark:进阶学习策略

image.png

在掌握了Spark的基础知识后,让我们来谈谈如何更深入地学习Spark,真正成为一名Spark专家。

1. 理解Spark的核心概念

要真正掌握Spark,你需要深入理解一些核心概念,比如RDD(弹性分布式数据集)、DataFrame、Dataset等。这些是Spark的基石,也是你能够高效使用Spark的关键。
image.png

举个例子,让我们看看如何使用RDD进行单词计数:

# 创建一个包含文本行的RDD
lines = spark.sparkContext.textFile("path/to/your/text/file.txt")# 将每行拆分成单词,然后进行计数
word_counts = lines.flatMap(lambda line: line.split(" ")) \.map(lambda word: (word, 1)) \.reduceByKey(lambda a, b: a + b)# 显示结果
for word, count in word_counts.collect():print(f"{word}: {count}")

这个例子展示了Spark的函数式编程模型,以及如何使用转换(transformation)和动作(action)操作来处理数据。

2. 拥抱Spark生态系统

Spark不仅仅是一个计算引擎,它还有一个丰富的生态系统。Spark SQL、Spark Streaming、MLlib (机器学习库)和GraphX (图计算库)都是Spark生态系统的重要组成部分。不要被这些吓到,记住我们的"糙快猛"原则,逐个攻克!

image.png

比如,你可以尝试使用Spark SQL来处理结构化数据:

# 从JSON文件创建一个DataFrame
df = spark.read.json("path/to/your/data.json")# 注册为临时视图
df.createOrReplaceTempView("my_data")# 使用SQL查询
result = spark.sql("""SELECT category, AVG(price) as avg_priceFROM my_dataGROUP BY categoryHAVING AVG(price) > 100
""")result.show()

3. 实战驱动学习

记住,光看不练是不行的。找一些开源的大数据项目,看看别人是如何使用Spark的。更好的是,自己动手做一个项目。比如,你可以尝试使用Spark Streaming处理实时数据:
image.png

from pyspark.sql.functions import *# 创建一个流式DataFrame,监听9999端口的数据
lines = spark.readStream.format("socket") \.option("host", "localhost").option("port", 9999).load()# 简单的单词计数
word_counts = lines.select(explode(split(lines.value, " ")).alias("word")) \.groupBy("word").count()# 启动流式查询
query = word_counts.writeStream.outputMode("complete") \.format("console").start()query.awaitTermination()

这个例子展示了如何使用Spark Streaming处理实时数据流。你可以用nc -lk 9999命令在终端启动一个数据源,然后输入文本,看看Spark是如何实时处理数据的。

4. 性能调优:磨刀不误砍柴工

image.png

当你的Spark应用运行在大规模数据集上时,性能调优就变得至关重要。这包括数据倾斜处理、内存管理、任务调度等方面。虽然这些听起来很高深,但别忘了我们的"糙快猛"精神 —— 先上手,在实践中慢慢优化。

一个简单的优化例子:

# 使用缓存加速重复计算
popular_products = df.groupBy("product_id").count().filter("count > 1000")
popular_products.cache()# 使用广播变量优化join操作
from pyspark.sql.functions import broadcastsmall_df = spark.table("small_but_important_table")
result = big_df.join(broadcast(small_df), "join_key")

5. 保持学习的激情

image.png

大数据技术发展很快,Spark也在不断更新。保持学习的激情,关注Spark的最新发展,参与社区讨论,这些都是提升自己的好方法。记住,当你遇到困难时,想想当初是如何"叉会腰"的,保持这种自信和热情!

Spark高级应用:从入门到精通

现在我们已经掌握了Spark的基础知识,是时候深入一些更高级的应用场景了。记住我们的"糙快猛"原则 —— 不要害怕尝试,在实践中学习和成长。

1. 机器学习与Spark MLlib

image.png

Spark的MLlib库提供了丰富的机器学习算法。作为一个从零开始学习算法的人,我深知掌握这些工具的重要性。让我们看一个使用MLlib进行线性回归的例子:

from pyspark.ml.regression import LinearRegression
from pyspark.ml.feature import VectorAssembler# 准备数据
data = spark.read.csv("path/to/your/data.csv", header=True, inferSchema=True)
assembler = VectorAssembler(inputCols=["feature1", "feature2", "feature3"], outputCol="features")
data = assembler.transform(data)# 划分训练集和测试集
(trainingData, testData) = data.randomSplit([0.7, 0.3])# 创建和训练模型
lr = LinearRegression(featuresCol="features", labelCol="label")
model = lr.fit(trainingData)# 在测试集上评估模型
predictions = model.transform(testData)
predictions.select("prediction", "label", "features").show(5)# 打印模型系数和截距
print("Coefficients: " + str(model.coefficients))
print("Intercept: " + str(model.intercept))

这个例子展示了如何使用Spark MLlib进行简单的线性回归。记住,"糙快猛"不意味着不求甚解。在实践的过程中,深入理解这些算法的原理和适用场景同样重要。

2. 图计算与GraphX

对于复杂的关系数据,Spark的GraphX模块提供了强大的图计算能力。例如,我们可以用它来分析社交网络:
image.png

from pyspark.sql import SparkSession
from graphframes import GraphFrame# 创建顶点DataFrame
v = spark.createDataFrame([("a", "Alice", 34),("b", "Bob", 36),("c", "Charlie", 30),
], ["id", "name", "age"])# 创建边DataFrame
e = spark.createDataFrame([("a", "b", "friend"),("b", "c", "follow"),("c", "b", "follow"),
], ["src", "dst", "relationship"])# 创建图
g = GraphFrame(v, e)# 查找入度最高的用户
result = g.inDegrees.orderBy("inDegree", ascending=False)
result.show()# 运行PageRank算法
ranks = g.pageRank(resetProbability=0.15, tol=0.01)
ranks.vertices.select("id", "pagerank").show()

这个例子展示了如何使用GraphX构建一个简单的社交网络图,并进行基本的图分析。

3. 性能调优进阶

image.png

在实际工作中,你可能会遇到各种性能问题。以下是一些进阶的性能调优技巧:

  1. 数据倾斜处理:
from pyspark.sql.functions import spark_partition_id# 识别数据倾斜
df.groupBy(spark_partition_id()).count().show()# 处理数据倾斜 - 加盐法
from pyspark.sql.functions import rand
df_skewed = df.withColumn("salt", (rand()*10).cast("int"))
df_normal = df_normal.withColumn("salt", lit(-1))result = df_skewed.join(broadcast(df_normal), (df_skewed.key == df_normal.key) & ((df_skewed.salt == df_normal.salt) | (df_normal.salt == -1)))
  1. 内存管理:
# 设置Spark配置以优化内存使用
spark.conf.set("spark.memory.fraction", 0.8)
spark.conf.set("spark.memory.storageFraction", 0.3)# 使用堆外内存
spark.conf.set("spark.memory.offHeap.enabled", "true")
spark.conf.set("spark.memory.offHeap.size", "2g")

4. 实战案例:日志分析系统

image.png

让我们把学到的知识综合起来,实现一个简单的日志分析系统:

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *# 创建SparkSession
spark = SparkSession.builder.appName("LogAnalysis").getOrCreate()# 定义日志格式
log_format = StructType([StructField("ip", StringType(), True),StructField("timestamp", TimestampType(), True),StructField("method", StringType(), True),StructField("url", StringType(), True),StructField("status", IntegerType(), True),StructField("size", IntegerType(), True)
])# 读取日志文件
logs = spark.readStream.format("csv") \.schema(log_format) \.option("sep", " ") \.load("/path/to/log/directory")# 分析日志
analyzed_logs = logs.withWatermark("timestamp", "1 hour") \.groupBy(window("timestamp", "5 minutes"), "status") \.agg(count("*").alias("count"))# 输出结果
query = analyzed_logs.writeStream \.outputMode("complete") \.format("console") \.start()query.awaitTermination()

这个例子展示了如何使用Spark Streaming处理实时日志数据,按时间窗口和状态码进行聚合分析。

5. 保持学习和探索的态度

image.png

大数据领域发展迅速,新技术和新工具不断涌现。保持开放和学习的心态至关重要。比如,你可以关注Apache Spark的最新版本更新,尝试新的功能;或者探索与Spark集成的其他工具,如Apache Kafka用于实时数据接入,或者Delta Lake用于构建可靠的数据湖。

记住,当初我们是如何"叉会腰"的。在大数据的世界里,永远有新的挑战等着我们去征服。保持那份初心和热情,你会发现自己总能在这个领域找到新的乐趣和成就感。

Spark在企业级应用中的实战经验

作为一个从零开始学习大数据的开发者,我深知将理论知识应用到实际企业环境中的挑战。让我们探讨一下Spark在企业级应用中的一些常见场景和最佳实践。

1. 数据湖构建与管理

image.png

在现代企业中,数据湖已成为管理和分析海量数据的重要工具。Spark在数据湖的构建和管理中扮演着关键角色。

from delta import *
from pyspark.sql.functions import *# 配置Spark以使用Delta Lake
spark = SparkSession.builder \.appName("DeltaLakeExample") \.config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \.getOrCreate()# 读取数据并写入Delta表
df = spark.read.format("csv").option("header", "true").load("/path/to/data.csv")
df.write.format("delta").mode("overwrite").save("/path/to/delta/table")# 读取Delta表并进行更新
deltaTable = DeltaTable.forPath(spark, "/path/to/delta/table")
deltaTable.update(condition = expr("id = 100"),set = { "name": lit("New Name") }
)# 时间旅行查询
df_at_version = spark.read.format("delta").option("versionAsOf", 0).load("/path/to/delta/table")

这个例子展示了如何使用Spark和Delta Lake构建一个简单的数据湖,支持ACID事务和时间旅行查询。记住,"糙快猛"并不意味着忽视数据的可靠性和一致性。

2. 实时数据处理与分析

在我转行学习大数据的过程中,实时数据处理是一个让我感到既兴奋又有挑战的领域。Spark Streaming结合Kafka可以构建强大的实时数据处理管道:
image.png

from pyspark.sql import SparkSession
from pyspark.sql.functions import from_json, col
from pyspark.sql.types import StructType, StringType, IntegerType# 创建SparkSession
spark = SparkSession.builder \.appName("KafkaSparkStreaming") \.config("spark.jars.packages", "org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2") \.getOrCreate()# 定义schema
schema = StructType() \.add("id", StringType()) \.add("name", StringType()) \.add("age", IntegerType())# 从Kafka读取数据
df = spark \.readStream \.format("kafka") \.option("kafka.bootstrap.servers", "localhost:9092") \.option("subscribe", "test-topic") \.load()# 解析JSON数据
parsed_df = df.select(from_json(col("value").cast("string"), schema).alias("data")).select("data.*")# 处理数据
result = parsed_df.groupBy("age").count()# 输出结果到控制台
query = result \.writeStream \.outputMode("complete") \.format("console") \.start()query.awaitTermination()

这个例子展示了如何使用Spark Streaming从Kafka读取数据,并进行实时处理。在实际应用中,你可能需要处理更复杂的业务逻辑,但基本框架是类似的。

3. 大规模机器学习

image.png

当我开始学习机器学习时,我意识到在大规模数据集上训练模型是一个巨大的挑战。Spark MLlib提供了分布式机器学习的能力,让我们能够处理海量数据:

from pyspark.ml import Pipeline
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.feature import StringIndexer, VectorAssembler
from pyspark.ml.evaluation import MulticlassClassificationEvaluator# 假设我们已经有了一个大规模数据集
data = spark.read.parquet("/path/to/large/dataset")# 准备特征
categorical_cols = ["category1", "category2"]
numeric_cols = ["feature1", "feature2", "feature3"]stages = []
for categoricalCol in categorical_cols:stringIndexer = StringIndexer(inputCol = categoricalCol, outputCol = categoricalCol + "Index")stages += [stringIndexer]assemblerInputs = [c + "Index" for c in categorical_cols] + numeric_cols
assembler = VectorAssembler(inputCols=assemblerInputs, outputCol="features")
stages += [assembler]# 创建和训练随机森林模型
rf = RandomForestClassifier(labelCol="label", featuresCol="features", numTrees=100)
stages += [rf]pipeline = Pipeline(stages = stages)# 划分训练集和测试集
(trainingData, testData) = data.randomSplit([0.7, 0.3])# 训练模型
model = pipeline.fit(trainingData)# 在测试集上评估模型
predictions = model.transform(testData)
evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)
print("Test Accuracy = %g" % accuracy)

这个例子展示了如何使用Spark MLlib构建一个完整的机器学习流水线,包括特征工程、模型训练和评估。记住,"糙快猛"的精神在这里同样适用:先搭建一个基本的模型,然后逐步优化和改进。

4. 性能调优的艺术

image.png

在我的学习过程中,我发现性能调优是一门需要不断实践和积累经验的艺术。这里有一些高级的调优技巧:

image.png

  1. 分区调优:
# 重分区以提高并行度
df = df.repartition(spark.sparkContext.defaultParallelism * 2)# 按照常用的过滤或join键重分区
df = df.repartition(col("join_key"))
  1. 广播变量与累加器:

image.png

from pyspark.sql.functions import broadcast# 使用广播join
small_df = spark.table("small_table")
result = large_df.join(broadcast(small_df), "join_key")# 使用累加器
accum = spark.sparkContext.accumulator(0)
def count_nulls(x):if x is None:accum.add(1)df.foreach(lambda row: count_nulls(row.field))
print("Number of null values: {}".format(accum.value))
  1. 缓存策略:
    image.png
from pyspark.storage import StorageLevel# 使用不同的存储级别
df.persist(StorageLevel.MEMORY_AND_DISK)

5. 与其他大数据技术的集成

在实际工作中,Spark常常需要与其他大数据技术协同工作。例如,与Hive集成进行大规模数据仓库查询:
image.png

from pyspark.sql import SparkSession# 创建支持Hive的SparkSession
spark = SparkSession.builder \.appName("SparkHiveIntegration") \.config("spark.sql.warehouse.dir", "/path/to/hive/warehouse") \.enableHiveSupport() \.getOrCreate()# 执行Hive查询
result = spark.sql("SELECT * FROM my_hive_table WHERE date > '2023-01-01'")
result.show()

或者与HBase集成进行快速的键值存储:

# 注意:这需要相应的HBase连接器
df = spark.read \.format("org.apache.hadoop.hbase.spark") \.option("hbase.table", "my_table") \.option("hbase.columns.mapping", "key_field STRING :key, field1 STRING c1:f1, field2 INT c1:f2") \.load()

结语:持续学习,不断突破

image.png

回顾我从零开始学习大数据的journey,我深深体会到"糙快猛"学习方法的重要性。

在Spark这样复杂而强大的技术面前,我们不应该被完美主义所束缚。相反,我们应该勇于尝试,在实践中学习,在错误中成长。

记住,当我们面对看似不可能的挑战时,要保持那份"可把我牛逼坏了,让我叉会腰儿"的自信和决心。每一次你解决了一个棘手的数据问题,优化了一个复杂的查询,或者部署了一个高性能的Spark应用,你都在向着成为大数据专家的目标迈进一步。

在这个数据驱动的时代,Spark的学习之旅永无止境。新的版本,新的特性,新的最佳实践不断涌现。保持好奇心,保持学习的热情,你会发现自己总能在这个领域找到新的挑战和机遇。

让我们一起在Spark的海洋中探索,让数据的力量在我们手中绽放。记住,你已经从一个初学者成长为能够处理复杂大数据问题的开发者。继续前进,下一个里程碑已在眼前!

相关文章:

如何学习Spark:糙快猛的大数据之旅

作为一名大数据开发者,我深知学习Spark的重要性。今天,我想和大家分享一下我的Spark学习心得,希望能够帮助到正在学习或准备学习Spark的朋友们。 目录 Spark是什么?学习Spark的"糙快猛"之道1. 不要追求完美,在实践中学习2. 利用大模型作为24小时助教3. 根据自己的节…...

交换机(Switches)和桥(Bridges)的区别

交换机(Switches)和桥接器(Bridges)在网络和通信领域中都起着重要作用,它们有一些共同点,但也有一些显著的区别: 工作层次: 桥接器(Bridges):桥接…...

基于springboot+vue的汽车租赁管理系统

摘要 在当今快速发展的数字化时代,汽车租赁行业作为现代服务业的重要组成部分,正面临着前所未有的机遇与挑战。为提升管理效率、优化用户体验并促进业务增长,我们设计并实现了一套基于Spring Boot后端框架与Vue.js前端技术的汽车租赁管理系统…...

《0基础》学习Python——第二十二讲__网络爬虫/<5>爬取豆瓣电影封面图

一、爬取豆瓣电影的图片封面 1、经过上节课我们所爬取的豆瓣电影的电影名、年份、国家、导演、主演、剧情,那么接下来我们将学习如何去爬取这些电影的图片,并将这些图片存放在文件夹中。 2、过程实现: 2.1、获取网页源码 首先还是和爬取电影名…...

全新UI自助图文打印系统小程序源码/自助云打印机前后端源码

全新UI自助图文打印系统小程序源码,自助云打印机前后端源码。最新的自助图文打印系统和证件照云打印小程序源码采用了PHP作为后端开发语言,旨在为用户提供全面的自助打印服务。 这些服务覆盖了多种文件格式,包括文档、图片、表格等。除此之外…...

yolo5图片视频、摄像头推理demo

yolo5图片、视频推理demo 图片 import torch# 加载预训练模型 model torch.hub.load(./yolo5, custom, pathyolov5s.pt, sourcelocal)# 加载图片 img 1.jpg# 进行推理 results model(img)# 解析结果 detections results.xyxy[0].cpu().numpy() # [x1, y1, x2, y2, confid…...

Scala学习笔记19: 隐式转换和隐式参数

目录 第十九章 隐式转换和隐式参数1- 隐式转换1. 隐式准换函数: 施展魔法的咒语2. 隐式类: 为已有类型添加魔法3. 隐式转换规则: 魔法生效的条件4. 举例说明: 见证魔法的时刻5. 注意事项: 谨慎使用魔法 2. 隐式参数1. 语义: 隐藏在背后的参数2. 使用 隐式参数的方式2.1 隐式值:…...

用户登录安全是如何保证的?如何保证用户账号、密码安全?

1.HTTP协议直接传输密码(无加密) 前端 直接发送HTTP请求(无加密),攻击者可直接捕获网络包,看到下面的明文信息 因此,使用HTTP协议传输会直接暴露用户敏感信息。 2.HTTPS协议直接传输密码&…...

Java 写一个可以持续发送消息的socket服务端

前言 最近在学习flink, 为了模仿一个持续的无界的数据源, 所以需要一个可以持续发送消息的socket服务端. 先上效果图 效果图 socket服务端可以持续的发送消息, flink端是一个统计单词出现总数的消费端,效果图如下 源代码 flink的消费端就不展示了, 需要引入一些依赖和版本…...

Ubuntu2204搭建ceph17

Ceph 环境初始化搭建Ceph 本次实验基于VMware17 节点IPstorage01192.168.200.161storage01192.168.200.162storage01192.168.200.163 环境初始化 初始化基础环境,三节点执行 #!/bin/bash# 定义节点信息 NODES("192.168.200.161 storage01 root" "…...

Druid 面试题及答案整理,最新面试题

Druid连接池在项目中有哪些优势? 1、高性能: Druid连接池在性能方面进行了大量优化,可以快速回收和分配数据库连接,减少数据库访问延迟。 2、实时监控: 提供Druid Monitor监控功能,可以实时监控数据库访问性能和连接池状态,便于及时发现和解决问题。 3、扩展性强: 支持…...

数据库基础与安装MYSQL数据库

一、数据库管理系统DBMS 数据库技术是计算机科学的核心技术之一,具有完备的理论基础。使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据 1.可以结构化存储大量的数据信息,方便用户进行有效的检索和访问 2.可以…...

昇思25天学习打卡营第18天| DCGAN生成漫画头像

DCGAN,全称深度卷积对抗生成网络(Deep Convolutional Generative Adversarial Networks),是一种通过对抗训练生成图像的技术。它在判别器和生成器中都使用了卷积和转置卷积层。 训练分为两个部分:训练判别器和训练生成…...

【面试八股文】计算机操作系统

参考:大佬图解文章 → 小林coding 简介:之前在学习小林大佬的八股文时,摘录了一些个人认为比较重要的内容,方便后续自己复习。【持续更新ing ~💯】 注:加五角星标注的,是当前掌握不牢固的&…...

宝塔Wordpress 插件 Redis object cache 导致内存很高 80%以上的原因和解决

查看内存前X 使用以下命令查看前10,修改10数字即可查看前X ps aux | head -1;ps aux |grep -v PID |sort -rn -k 4 | head -10 查看cpu占用 查看前10 ps aux | head -1;ps aux |grep -v PID |sort -rn -k 3 | head -10 原因是 4GiB 内存的服务器,Redis会…...

node解析Excel中的考试题并实现在线做题功能

1、背景 最近公司安排业务技能考试,下发excel文件的题库,在excel里查看并不是很方便,就想着像学习驾考题目一样,一边看一边做,做完之后可以查看正确答案。 2、开始分析需求 题目格式如下图 需求比较简单,…...

怎么降低美国服务器硬盘故障率?

要降低硬盘故障率,首先需要了解其产生的原因,常见的美国服务器硬盘故障原因包括温度过高、振动过大、电流不稳定、质量问题等。对于美国服务器而言,由于其运行环境可能存在差异,如温湿度变化大、电力供应不稳定等,这些…...

Java---后端事务管理

代码世界聚眸光,昼夜敲盘思绪长。 算法心间精构建,编程路上细思量。 屏前架构乾坤定,键上飞驰智慧扬。 默默耕耘成果现,创新科技铸辉煌。 目录 一,概念 二,Spring事务管理 三,rollbackFor事务回…...

Leetcode 3223. Minimum Length of String After Operations

Leetcode 3223. Minimum Length of String After Operations 1. 解题思路2. 代码实现 题目链接:3223. Minimum Length of String After Operations 1. 解题思路 这一题还是比较简单的,其实就是想明白对于任何一个字符,如果其个数在3个或以…...

oops使用笔记

oops-plugin-excel-to-json 使用 gitee上的文档图片不可见 参考 > https://forum.cocos.org/t/topic/156800 配置,打开“项目设置”,拖动到最下面,有一个"Excel to Json",前3项采用默认配置吧Excel, 默认的Excel目录是与assets平级的excel目…...

redistemplate介绍与演示

redistemplate是一个用于在Redis中存储和检索数据的模板库。它提供了一组简单易用的函数和接口,使开发者能够更方便地使用Redis进行数据操作。 使用redistemplate,你可以实现以下功能: 存储和检索数据:redistemplate提供了存储和…...

代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型

介绍 本教程描述了一个具有二元分类结果的研究的典型代谢组学数据分析工作流程。主要步骤包括: 从Excel表格导入代谢物和实验数据。基于汇总QC的数据清洗。利用主成分分析可视化来检查数据质量。两类单变量统计。使用偏最小二乘判别分析(PLS-DA)进行多变量分析,包括: 模型…...

任务3 git基础知识(主要是pr的笔记)

任务要求 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Git/task.md 文档 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Git/readme.md 任务 任务1:提交PR https://github.com/InternLM/Tutorial/pull/1242 任务2:实践…...

三相PWM整流器滞环电流控制仿真matlab simulink

1、内容简介 略 88-可以交流、咨询、答疑 2、内容说明 略 三相PWM整流器已广泛应用工业与电气控制领域电流控制技术决定着三相PWM整流器系统的控制性能。综合比 较了各种电流控制方法应用较多的滞环比较…...

AVL树超详解上

前言 学习过了二叉树以及二叉搜索树后(不了解二叉搜索树的朋友可以先看看这篇博客,二叉搜索树详解-CSDN博客),我们在一般情况下对于二叉搜索树的插入与查询时间复杂度都是O(lgN),是十分快的,但是在一些特殊…...

spring boot 实现token验证登陆状态

1、添加maven依赖到pom.xml <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId>…...

【.NET全栈】ASP.NET开发Web应用——用户控件和绘图

文章目录 前言一、用户控件1、创建用户控件2、使用用户控件3、在web.config中注册用户控件4、用户控件中公开属性5、用户控件事件6、动态加载用户控件 二、动态绘图1、基本绘图2、绘制一个自定义的图片3、在Web页面放置自定义图片4、图片格式和质量5、一个Web绘图示例程序 前言…...

一行Python代码实现数据清洗的18种方法

目录 1. 去除字符串两边空格 2. 转换数据类型 3. 大小写转换 4. 移除列表中的重复元素 5. 快速统计元素出现次数 6. 字符串分割成列表 7. 列表合并 8. 数据填充 9. 提取日期时间 10. 字符串替换 11. 快速排序 12. 提取数字 13. 空值处理&#xff08;假设是列表&am…...

Java API练习 (1) (2024.7.20)

Date类 package APIExercise20240720; import java.util.Date; // 导包&#xff0c;Date是util下的 public class Date20240720 {public static void main(String[] args) {Date nowTime new Date(); // 得到当前系统时间System.out.println(nowTime);Date startTime new Da…...

JavaScript之WebAPIs-BOM

目录 BOM操作浏览器一、Window对象1.1 BOM&#xff08;浏览器对象模型&#xff09;1.2 定时器-延时函数1.3 js执行机制1.4 location对象1.5 navigator对象1.6 history对象 二、本地存储三、补充数组中的map方法数组中的join方法数组中的forEach方法(重点)数组中的filter方法(重…...

电子商务网站的类型/app拉新

前言 为防止背题&#xff0c;大部分题目不设标准答案&#xff0c;重点考察面试者的基础知识和思维逻辑&#xff0c;答案的提示见后面。 正文 题目1、举例两个遇到过印象深刻的外网Crash&#xff0c;并介绍如何发现、定位、解决&#xff1b; 题目2、举例两个性能问题的优化&…...

中国室内设计师网官网/如何提升网站seo排名

链接&#xff1a;http://arc073.contest.atcoder.jp/tasks/arc073_c 题目大意&#xff1a;给定n对数&#xff0c;将每对中一个染红一个染蓝&#xff0c;求&#xff08;Rmax-Rmin&#xff09;*&#xff08;Bmax-Bmin&#xff09;。 分析&#xff1a;- -感觉没有太多的知识点&…...

淘宝联盟的网站管理怎么做/社交媒体营销三种方式

一、原理、标准相关 1、DCT变换公式 2、量化与反量化公式 3、量化参数QP与量化组QG 4、率失真量化RDOQ...

设计素材网站会员/成人短期电脑培训班学费

一.内置运算符 1关系运算符 2.算术运算符 3.逻辑运算符 4.复杂类型函数 5.复杂类型函数应用 转载于:https://www.cnblogs.com/yszd/p/11128683.html...

做 专而精 的网站/网络营销常用的工具和方法

题目 HH有个一成不变的习惯&#xff0c;喜欢饭后百步走。所谓百步走&#xff0c;就是散步&#xff0c;就是在一定的时间 内&#xff0c;走过一定的距离。 但 是同时HH又是个喜欢变化的人&#xff0c;所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人&#xff0c…...

煎蛋网站用什么做的/如何注册网站怎么注册

MessageQueue提供了另一类消息&#xff0c;IdleHandler 如果返回false,每次轮询都会调用(理论上应该可以做一些别的东西) Looper.myQueue().addIdleHandler(new MyIdleOnce());Looper.myQueue().addIdleHandler(new MyIdleKeep());//removeIdleHandlerclass MyIdleKeep impleme…...