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

Windows环境下开发pyspark程序

Windows环境下开发pyspark程序

一、环境准备

1.1. Anaconda/Miniconda(Python环境)

如果不怕包的版本管理混乱,可以直接使用已有的Python环境。

需要安装anaconda/miniconda(python3.8版本以上):Anaconda下载安装及老版本选择(超详细)
使用conda新建一个虚拟环境用于PySpark开发:Python虚拟环境(windows)

首先,我们新建一个 pyspark_env 文件夹,作为虚拟环境的存放路径(也可以不用,conda创建虚拟环境时检测到没有会自动新建):
在这里插入图片描述
创建环境并指定路径:

conda create -p E:\penv\pyspark_env python=3.9

在这里插入图片描述
创建完成:
在这里插入图片描述
激活环境:

conda activate E:\penv\pyspark_env

在这里插入图片描述
安装pyspark:

pip install pyspark -i https://pypi.tuna.tsinghua.edu.cn/simple/

在这里插入图片描述
安装psutil

pip install psutil

在这里插入图片描述

1.2. JDK

请注意,PySpark需要Java 8(不包括8u371之前版本)、11或17,并且JAVA_HOME需要正确设置。设置JAVA安装路径的时候不要有空格,否则会报错。
在这里插入图片描述
参考这篇文章:JDK8卸载与安装教程(超详细)

1.3. 安装hadoop

(1)下载
进入hadoop安装包下载地址,这里选择的是hadoop-3.3.6.tar.gz版本:
在这里插入图片描述
(2)解压
对下载好的文件进行解压,将其解压放在个人想存放的目录中(记住路径,以便配置环境变量)。
在这里插入图片描述
在这里插入图片描述
解压成功:
在这里插入图片描述
(3)配置环境变量

HADOOP_HOME

在这里插入图片描述

%HADOOP_HOME%\bin

在这里插入图片描述
此时bin目录( E:\hadoop-3.3.6\bin)下没有 hadoop.dll及winutils.exe文件:
在这里插入图片描述

  • 需要进行下载winutils :https://soft.3dmgame.com/down/204154.html
    在这里插入图片描述

  • 解压文件,选择hadoop版本对应的文件夹bin目录下的hadoop.dll和winutils.exe文件
    在这里插入图片描述

  • 将hadoop.dll和winutils.exe 拷贝到E:\hadoop-3.3.6\bin 、C:\Windows\System32下(两个文件各拷贝一份到两个目录中)
    在这里插入图片描述
    在这里插入图片描述
    (4)环境测试

二、新建一个Python项目

2.1. 创建项目并配置解释器

新建一个项目,项目名为pyspark
在这里插入图片描述
添加新的解释器(找到虚拟环境中的python.exe):
在这里插入图片描述
在这里插入图片描述
创建项目:
在这里插入图片描述

2.2. 创建目录文件

main :用于存放每天开发的一些代码文件
resources :用于存放程序中需要用到的配置文件
datas :用于存放每天用到的一些数据文件
test :用于存放测试时的一些代码文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3. 环境测试

import os
from pyspark import SparkContext, SparkConf  # 导入pyspark模块if __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe' os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 获取 conf 对象# setMaster  按照什么模式运行,local  bigdata01:7077  yarn#  local[2]  使用2核CPU   * 你本地资源有多少核就用多少核#  appName 任务的名字conf = SparkConf().setMaster("local[*]").setAppName("第一个Spark程序")# 假如我想设置压缩# conf.set("spark.eventLog.compression.codec","snappy")# 根据配置文件,得到一个SC对象,第一个conf 是 形参的名字,第二个conf 是实参的名字sc = SparkContext(conf=conf)print(sc)# 使用完后,记得关闭sc.stop()

输出结果:
在这里插入图片描述

三、WordCount案例

3.1 数据准备

这里我使用文心一言生成了一份数据,用来测试WordCount
数据如下所示:

Hello World! This is a simple WordCount example. The WordCount program is used to count the frequency of words in a given text.Let's analyze this example: "Hello World!" Hello again, World! Notice how the word 'Hello' appears multiple times, as does 'World'.The program should ignore case sensitivity, meaning 'Hello' and 'hello' should be treated as the same word. Additionally, punctuation marks like commas, periods, and exclamation points should not affect the word count.In summary, a WordCount program takes text as input and outputs a list of words along with their corresponding frequencies. For instance, the word 'Hello' might appear 3 times, while 'World' appears 2 times in this example.

数据特点

  • 重复单词:Hello 和 World 多次出现。
  • 标点符号:包含逗号、句号和感叹号等标点符号。
  • 大小写混合:Hello 和 hello 应被视为同一个单词。
  • 自然语言结构:包含简单句子和段落,模拟真实文本。

3.2 代码实现

代码实现如下所示:

import os
import re
from pyspark import SparkContext, SparkConf  # 导入pyspark模块if __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe'  # 配置base环境Python解析器的路径os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 获取 conf 对象# setMaster  按照什么模式运行,local  bigdata01:7077  yarn#  local[2]  使用2核CPU   * 你本地资源有多少核就用多少核#  appName 任务的名字conf = SparkConf().setMaster("local[*]").setAppName("WordCount")# 假如我想设置压缩# conf.set("spark.eventLog.compression.codec","snappy")# 根据配置文件,得到一个SC对象,第一个conf 是 形参的名字,第二个conf 是实参的名字sc = SparkContext(conf=conf)fileRdd = sc.textFile("../datas/wordcount/word.txt")  # 读取数据rsRdd = fileRdd \.filter(lambda line: len(line.strip()) > 0) \.flatMap(lambda line: line.strip().split(r" ")) \.map(lambda word: (word, 1)) \.reduceByKey(lambda a, b: a + b)rsRdd.saveAsTextFile("../output")# 使用完后,记得关闭sc.stop()

输出结果:
在这里插入图片描述
代码解析:

  • filter(lambda line: len(line.strip()) > 0):过滤掉空行;
    在这里插入图片描述
  • flatMap(lambda line:line.strip().split(r"")):将每一行多个单词转换为一行一个单词,r 的作用是告诉 Python 将字符串按原始字符串处理,避免转义字符的干扰。
    在这里插入图片描述
  • .map(lambda word: (word, 1)):将每个单词转换成KeyValue的二元组(word,1)
    在这里插入图片描述
  • reduceByKey(lambda a, b: a + b):先根据key值进行分组,然后再进行聚合。
    在这里插入图片描述

3.3 代码改进

虽然代码实现出来了简单的WordCount,但是没有达到我们想要的预期,主要有以下几点需要改进:

  • 单词前后的符号无法处理,导致一个单词分成了不同的组。
    在这里插入图片描述
  • 对单词的大小写不敏感,如:Hello和hello应视为一个词。
    在这里插入图片描述
3.3.1 解决标点符号

对于标点符号,我们可以使用正则表达式进行处理。
下面是正则表达式的一个测试用例:

import retext = "你好,世界!这是一个测试文本。"
# 使用正则表达式去除标点符号
result = re.sub(r'[^\w\s]', '', text)
print(result)  # 输出:你好世界这是一个测试文本

其中:

  • [^\w\s] 匹配所有非字母、数字和空格的字符(即标点符号)。
  • re.sub() 将匹配的字符替换为空字符串。
3.3.2 解决大小写字母

对单词的大小写不敏感,我们可以采取以下措施。

  • 全部字母大写或者小写:使用upper()或者lower()函数。
text = "Hello World"
upper_text = text.upper()
lower_text = text.lower()
print(upper_text)  # HELLO WORLD
print(lower_text)  # hello world
  • 首字母大写,其余字母小写:
  1. 使用 capitalize() 方法 capitalize() 方法会将字符串的第一个字符转换为大写,其余字符转换为小写。
text = "hello world"
capitalized_text = text.capitalize()
print(capitalized_text)  # 输出: Hello world
  1. 使用 title() 方法 如果你希望字符串中每个单词的首字母都大写,可以使用 title() 方法。
text = "hello world"
title_text = text.title()
print(title_text)  # 输出: Hello World
3.3.3 代码实现

这里我们采用正则表达式对标点符号进行处理,使用title()方法处理字母大小写。那么,改进后的代码如下:

import os
import re
from pyspark import SparkContext, SparkConf  # 导入pyspark模块if __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe'  # 配置base环境Python解析器的路径os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 获取 conf 对象# setMaster  按照什么模式运行,local  bigdata01:7077  yarn#  local[2]  使用2核CPU   * 你本地资源有多少核就用多少核#  appName 任务的名字conf = SparkConf().setMaster("local[*]").setAppName("WordCount")# 假如我想设置压缩# conf.set("spark.eventLog.compression.codec","snappy")# 根据配置文件,得到一个SC对象,第一个conf 是 形参的名字,第二个conf 是实参的名字sc = SparkContext(conf=conf)fileRdd = sc.textFile("../datas/wordcount/word.txt")  # 读取数据rsRdd = fileRdd \.filter(lambda line: len(line.strip()) > 0) \.flatMap(lambda line: re.sub(r'[^\w\s]', '', line.strip()).split()) \.map(lambda word: (word.title(), 1)) \.reduceByKey(lambda a, b: a + b)rsRdd.saveAsTextFile("../output3")# 使用完后,记得关闭sc.stop()

输出结果为:

('Hello', 7)
('World', 5)
('Wordcount', 3)
('Example', 3)
('The', 7)
('Program', 3)
('Count', 2)
('Of', 2)
('Words', 2)
('Lets', 1)
('Analyze', 1)
('Again', 1)
('Appears', 2)
('Should', 3)
('Ignore', 1)
('Sensitivity', 1)
('And', 3)
('Same', 1)
('Punctuation', 1)
('Marks', 1)
('Periods', 1)
('Not', 1)
('Affect', 1)
('Summary', 1)
('Takes', 1)
('Input', 1)
('Outputs', 1)
('List', 1)
('Corresponding', 1)
('Instance', 1)
('Might', 1)
('This', 3)
('Is', 2)
('A', 4)
('Simple', 1)
('Used', 1)
('To', 1)
('Frequency', 1)
('In', 3)
('Given', 1)
('Text', 2)
('Notice', 1)
('How', 1)
('Word', 4)
('Multiple', 1)
('Times', 3)
('As', 3)
('Does', 1)
('Case', 1)
('Meaning', 1)
('Be', 1)
('Treated', 1)
('Additionally', 1)
('Like', 1)
('Commas', 1)
('Exclamation', 1)
('Points', 1)
('Along', 1)
('With', 1)
('Their', 1)
('Frequencies', 1)
('For', 1)
('Appear', 1)
('3', 1)
('While', 1)
('2', 1)

四、数据去重案例

4.1 数据准备

这里提供了csv版本的数据:

ID ,  Name    ,  Email                 ,  Phone        ,  Address
1  ,  Alice   ,  alice@example.com     ,  123-456-7890 ,  123 Main St
2  ,  Bob     ,  bob@example.com       ,  234-567-8901 ,  456 Elm St
3  ,  Alice   ,  alice@example.com     ,  123-456-7890 ,  123 Main St
4  ,  Charlie ,  charlie@example.com   ,  345-678-9012 ,  789 Oak St
5  ,  David   ,  david@example.com     ,  456-789-0123 ,  101 Pine St
6  ,  Alice   ,  alice.new@example.com ,  123-456-7890 ,  123 Main St (new addr)
7  ,  Bob     ,  bob@example.com       ,  234-567-8901 ,  456 Elm St (alt addr)
8  ,  Eve     ,  eve@example.com       ,  567-890-1234 ,  202 Maple St
9  ,  Charlie ,  charlie@example.com   ,  345-678-9012 ,  789 Oak St

4.2 去重规则

  1. 完全匹配去重:如果两行数据的所有字段都相同,则认为是重复项,保留其中一行。
  2. 部分匹配去重(可选):如果某些字段(如 Name 和 Email)相同,但其他字段(如 Phone 和 Address)不同,可以根据业务需求决定是否视为重复项。

在此示例中,我们仅考虑完全匹配去重。

4.3 代码实现

方法一:使用PySpark中dataframe进行实现:

import os
from pyspark.sql import SparkSessionif __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe'os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 创建SparkSessionspark = SparkSession.builder \.appName("Data Deduplication") \.getOrCreate()# 读取CSV文件csv_file_path = "../datas/data deduplication/data.csv"# header=True表示第一行作为列名,inferSchema=True尝试自动推断数据类型。df = spark.read.csv(csv_file_path, header=True, inferSchema=True)    # 显示原始数据print("原始数据:")df.show()# 获取所有列名并排除ID字段columns_to_check = df.columns[1:]# 去除重复行(忽略ID字段)# 使用dropDuplicates()函数基于columns_to_check列表中的列名去除重复行。这意味着如果两行在这些列上的值完全相同,则只保留一行。df_no_duplicates = df.dropDuplicates(subset=columns_to_check)# 显示去重后的数据print("去重后的数据:")df_no_duplicates.show()# 如果需要保存去重后的数据到新的CSV文件output_csv_file_path = "../datas/data deduplication/deduplicated_data.csv"df_no_duplicates.write.csv(output_csv_file_path, header=True, mode="overwrite")# 停止SparkSessionspark.stop()

输出结果为:
在这里插入图片描述
在这里插入图片描述
方法二:使用PySaprk中的SQL进行实现。

import os
from pyspark.sql import SparkSessionif __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe'os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 创建SparkSessionspark = SparkSession.builder \.appName("Data Deduplication") \.getOrCreate()# 读取CSV文件csv_file_path = "../datas/data deduplication/data.csv"# header=True表示第一行作为列名,inferSchema=True尝试自动推断数据类型。df = spark.read.csv(csv_file_path, header=True, inferSchema=True)# 获取所有列名并排除ID字段columns_to_check = df.columns[1:]# 创建一个不包含ID字段的DataFramedf = df.select(columns_to_check)# 创建一个临时视图df.createOrReplaceTempView("my_table")spark.sql("select DISTINCT * from my_table").show()# 停止SparkSessionspark.stop()

输出结果:
在这里插入图片描述
但是这个没有对应的ID列。
方法三

import os
from pyspark.sql import SparkSessionif __name__ == '__main__':# 配置环境os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk-1.8'# 配置Hadoop的路径,就是前面解压的那个路径os.environ['HADOOP_HOME'] = 'E:/hadoop-3.3.6'# 配置base环境Python解析器的路径os.environ['PYSPARK_PYTHON'] = 'E:/penv/pyspark_env/python.exe'os.environ['PYSPARK_DRIVER_PYTHON'] = 'E:/penv/pyspark_env/python.exe'# 创建SparkSessionspark = SparkSession.builder \.appName("Data Deduplication") \.getOrCreate()# 读取CSV文件csv_file_path = "../datas/data deduplication/data.csv"# header=True表示第一行作为列名,inferSchema=True尝试自动推断数据类型。df = spark.read.csv(csv_file_path, header=True, inferSchema=True)# 创建一个临时视图df.createOrReplaceTempView("tt")spark.sql("""SELECT * FROM ttWHERE ID  IN (select min(ID) from tt group by Name,Email,Phone,Address)""").show()# 停止SparkSessionspark.stop()

输出结果:
在这里插入图片描述

问题

1. 测试hadoop出现错误

在这里插入图片描述
原因分析:这时候,多半是因为你的java环境变量路径含有空格。
解决方法
(1)找到hadoop\etc\hadoop这个目录下的hadoop-env.cmd这个命令脚本。
在这里插入图片描述
然后,右键,编辑/notpad ++ ,进入编辑页面:
在这里插入图片描述
修改JAVA_HOME,我的JAVA的安装路径为:C:\Program Files\Java\jdk-1.8
在这里插入图片描述
添加引号:
在这里插入图片描述
查看hadoop版本:
在这里插入图片描述

2. Please install psutil

运行代码,出现下面的情况:

E:\penv\pyspark_env\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
E:\penv\pyspark_env\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
E:\penv\pyspark_env\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling
E:\penv\pyspark_env\Lib\site-packages\pyspark\python\lib\pyspark.zip\pyspark\shuffle.py:65: UserWarning: Please install psutil to have better support with spilling进程已结束,退出代码0

在这里插入图片描述
解决方案,安装这个包:

pip install psutil

参考

  1. Hadoop高手之路4-HDFS
  2. Anaconda下载安装及老版本选择(超详细)
  3. Python虚拟环境(windows)
  4. JDK8卸载与安装教程(超详细)
  5. Windows环境本地配置pyspark环境详细教程
  6. win10下执行Hadoop命令报错:系统找不到指定的路径。Error: JAVA_HOME is incorrectly set. Please update D:
  7. sparkRDD编程实战

相关文章:

Windows环境下开发pyspark程序

Windows环境下开发pyspark程序 一、环境准备 1.1. Anaconda/Miniconda(Python环境) 如果不怕包的版本管理混乱,可以直接使用已有的Python环境。 需要安装anaconda/miniconda(python3.8版本以上):Anaconda…...

thinkphp8.0上传图片到阿里云对象存储(oss)

1、开通oss,并获取accessKeyId、accessKeySecret <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><tit…...

SSM婚纱摄影网的设计

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…...

1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize

1110款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100 Icons Easily Customize 产品特点 — 24 x 24 px 网格大小 — 2px 线条描边 — 所有形状都是基于矢量的 — 平滑和圆角 — 易于更改颜色 类别 &#x1f6a8; 警报和反馈 ⬆️ 箭头 &…...

nacos的地址应该配置在项目的哪个文件中

在 Spring Boot 和 Spring Cloud 的上下文中&#xff0c;​Nacos 的地址既可以配置在 bootstrap.yml 中&#xff0c;也可以配置在 application.yml 中&#xff0c;但具体取决于使用场景和需求。以下是两者的区别和最佳实践&#xff1a; ​1. bootstrap.yml vs application.yml …...

Llama 4 家族:原生多模态 AI 创新的新时代开启

0 要点总结 Meta发布 Llama 4 系列的首批模型&#xff0c;帮用户打造更个性化多模态体验Llama 4 Scout 是有 170 亿激活参数、16 个专家模块的模型&#xff0c;同类中全球最强多模态模型&#xff0c;性能超越以往所有 Llama 系列模型&#xff0c;能在一张 NVIDIA H100 GPU 上运…...

OpenCV 在树莓派上进行实时人脸检测

这段 Python 代码借助 OpenCV 库实现了在树莓派上进行实时人脸检测的功能。它会开启摄像头捕获视频帧&#xff0c;在每一帧里检测人脸并以矩形框标记出来&#xff0c;同时在画面上显示帧率&#xff08;FPS&#xff09;。 依赖库 cv2&#xff1a;OpenCV 库&#xff0c;用于计算…...

SMT加工贴片核心工艺解析

内容概要 表面贴装技术&#xff08;SMT&#xff09;作为现代电子制造的核心工艺&#xff0c;其加工流程的精细度直接影响产品性能和良率。本文系统性梳理SMT贴片生产的全链条技术节点&#xff0c;以焊膏印刷、元件贴装、回流焊接三大核心工序为轴线&#xff0c;剖析各环节的工…...

嵌入式Linux驱动开发基础知识(三)

Linux系统与驱动开发&#xff1a;从字符设备到I2C传感器驱动实战 本文将系统梳理Linux驱动开发的核心知识与实战流程&#xff0c;从基础概念到项目实践&#xff0c;带你完整掌握Linux驱动开发的关键技术。我们将从字符设备驱动框架讲起&#xff0c;深入设备树配置原理&#xf…...

正则表达式(Regular Expression,简称 Regex)

一、5w2h&#xff08;七问法&#xff09;分析正则表达式 是的&#xff0c;5W2H 完全可以应用于研究 正则表达式&#xff08;Regular Expressions&#xff09;。通过回答 5W2H 的七个问题&#xff0c;我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…...

Superset 问题

和nginx结合使用&#xff0c;如果不是配置到根路径&#xff0c;会比较麻烦&#xff0c;我试了很多种方法&#xff0c;也就 这个 靠谱点&#xff0c;不过&#xff0c;我最后还是选择的部署在根路径&#xff0c;先探索一番再说默认不能选择mysql数据库&#xff0c;需要安装mysql客…...

JMeter脚本录制(火狐)

录制前准备&#xff1a; 电脑&#xff1a; 1、将JMeter证书导入&#xff0c;&#xff08;bin目录下有一个证书&#xff0c;需要安装这个证书到电脑中&#xff09; 2、按winr&#xff0c;输入certmgr.msc&#xff0c;打开证书&#xff0c;点击下一步&#xff0c;输入JMeter证书…...

基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校社团管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能结构图 局部E-R图 系统首页页面 用户…...

Maven/Gradle的讲解

一、为什么需要构建工具? 在理解 Maven/Gradle 之前,先明确它们解决的问题: ​​依赖管理​​:项目中可能需要引入第三方库(如 Spring、JUnit 等),手动下载和管理这些库的版本非常麻烦。​​标准化构建流程​​:编译代码、运行测试、打包成 JAR/WAR 文件等步骤需要自动…...

C# Winform 入门(3)之尺寸同比例缩放

放大前 放大后 1.定义当前窗体的宽度和高度 private float x;//定义当前窗体的宽度private float y;//定义当前窗台的高度 2.接收当前窗体的尺寸大小 x this.Width;//存储原始宽度ythis.Height;//存储原始高度setTag(this);//为控件设置 Tag 属性 3.声明方法&#xff0c;获…...

infinityfree最新免费建站详细教程_无需备案_5G空间_无限流量_免费域名_免费SSL

一、明确目标—是否要使用 1.为什么选择InfinityFree&#xff1f; 对于初学者、学生或只是想尝试网站搭建的个人用户来说&#xff0c;InfinityFree提供了一个绝佳的免费解决方案。这个国外免费的虚拟主机服务提供&#xff1a; 5GB存储空间 - 足以存放个人博客、作品集或小型…...

打造高效英文单词记忆系统:基于Python的实现与分析

在当今全球化的世界中,掌握一门外语已成为必不可少的技能。对于许多学习者来说,记忆大量的英文单词是一个漫长而艰难的过程。为了提高学习效率,我们开发了一个基于Python的英文单词记忆系统。这个系统结合了数据管理、复习计划、学习统计和测试练习等多个模块,旨在为用户提…...

node_modules\deasync: Command failed.

运行&#xff1a;“yarn install” 时报错 PS D:\WebPro\hainan-mini-program> yarn install yarn install v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... warning " > babel-loader8.2.2" has un…...

session临时文件包含

使用情况 if(isset($_GET[file])){$file $_GET[file];$file str_replace("php", "???", $file);$file str_replace("data", "???", $file);$file str_replace(":", "???", $file);$file str_repla…...

【新能源汽车研发测试数据深度分析:从传感器到智能决策的硬核方法论】

摘要&#xff1a; 本文系统性解构新能源汽车&#xff08;NEV&#xff09;研发测试中的数据采集、处理及分析全链条&#xff0c;覆盖传感器融合、大数据清洗、AI算法优化等核心技术&#xff0c;并引入行业顶级案例&#xff08;如特斯拉Autopilot验证、宁德时代BMS算法迭代&#…...

游戏引擎学习第206天

回顾并为当天的工作定下目标 接着回顾了前一天的进展。之前我们做了一些调试功能&#xff0c;并且已经完成了一些基础的工作&#xff0c;但是还有一些功能需要继续完善。其中一个目标是能够展示实体数据&#xff0c;以便在开发游戏逻辑系统时&#xff0c;可以清晰地查看和检查…...

Zapier MCP:重塑跨应用自动化协作的技术实践

引言&#xff1a;数字化协作的痛点与突破 在当今多工具协同的工作环境中&#xff0c;开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP&#xff08;Model Context Protocol&#xff09;协议通过标准化数据交互框架&#xff0c;为跨应用自动化提供了新的…...

ubuntu部署ollama+deepseek+open-webui

ubuntu部署ollamadeepseekopen-webui 全文-ubuntu部署ollamadeepseekopen-webui 大纲 Ollama部署 安装Ollama&#xff1a;使用命令apt install curl和curl -fsSL https://ollama.com/install.sh | sh ollama-v网络访问配置&#xff1a;设置环境变量OLLAMA_HOST0.0.0.0:11434&…...

蓝桥云客--破译密码

5.破译密码【算法赛】 - 蓝桥云课 问题描述 在近期举办的蓝桥杯竞赛中&#xff0c;诞生了一场激动人心的双人破译挑战。比赛的主办方准备了N块神秘的密码芯片&#xff0c;参赛队伍需要在这场智力竞赛中展示团队合作的默契与效率。每个队伍需选出一位破译者与一位传输者&#…...

量子计算与经典计算的拉锯战:一场关于计算未来的辩论

在计算科学领域&#xff0c;一场关于未来的激烈辩论正在上演。2025年3月&#xff0c;D-Wave量子公司的研究人员在《Science》杂志上发表了一项突破性成果&#xff0c;声称他们的量子退火处理器在几分钟内解决了一个经典超级计算机需要数百万年才能完成的复杂现实问题。这一声明…...

Java面试黄金宝典30

1. 请详细列举 30 条常用 SQL 优化方法 定义 SQL 优化是指通过对 SQL 语句、数据库表结构、索引等进行调整和改进&#xff0c;以提高 SQL 查询的执行效率&#xff0c;减少系统资源消耗&#xff0c;提升数据库整体性能的一系列操作。 要点 从索引运用、查询语句结构优化、数据…...

React-Diffing算法和key的作用

1.验证Diffing算法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…...

【NLP 54、大模型训练相关知识】

目录 引言&#xff1a;大模型训练两大问题 一、并行训练 1.方式一&#xff1a;数据并行 DP ① 复制模型到多个GPU ② 各自计算梯度后累加&#xff0c;再反传更新 ③ 需要单卡就能训练整个模型&#xff08;显存够大&#xff09; 2.方式二&#xff1a;模型并行 PP ① 将模型的不同…...

cursor机器码重置

1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor&#xff0c;ctrlshiftp &#xff0c;输入fake,点击确定...

IPSG 功能协议

IPSG&#xff08;IP Source Guard&#xff09;即 IP 源保护&#xff0c;是一种基于 IP 地址和 MAC 地址绑定的安全功能&#xff0c;用于防止 IP 地址欺骗和非法的 IP 地址访问。以下是配置 IPSG 功能的一般步骤&#xff1a; 基于端口的 IPSG 配置 进入接口配置模式&#xff1…...