Spark SQL概述(专业解释+生活化比喻)
专业解释
一、什么是Spark SQL?
一句话定义:
Spark SQL是Apache Spark中专门处理结构化数据的模块,可以让你像操作数据库表一样处理数据,支持用SQL查询或编程API(DataFrame/DataSet)分析数据。
通俗理解:
假设你有一张Excel表格,里面有学生的成绩数据。传统Spark(RDD)处理这类数据需要写复杂代码,而Spark SQL能让你直接写SQL语句(比如SELECT 姓名, AVG(成绩) FROM 表 GROUP BY 姓名
)快速分析数据,就像操作数据库一样简单。
核心特点:
-
统一数据处理:能直接读取JSON、Parquet、Hive表、CSV等结构化数据。
-
兼容Hive:支持HiveQL语法,可无缝对接Hive数据仓库。
-
混合编程:SQL、DataFrame API、Java/Scala/Python代码可以混用。
-
高性能优化:底层有Catalyst优化器自动优化查询逻辑,比直接写RDD更高效。
-
与Spark生态集成:结果可直接用于机器学习(MLlib)、流计算(Spark Streaming)等。
二、Spark SQL运行原理
核心流程:
当你提交一个SQL查询或DataFrame操作时,Spark SQL会通过以下步骤处理:
-
解析SQL语句
-
将SQL字符串解析成抽象语法树(AST),检查语法是否正确。
-
-
逻辑计划(Logical Plan)
-
将AST转换为逻辑执行计划(描述要做什么,比如过滤、聚合)。
-
例如:
SELECT name FROM students WHERE age > 18
→ 逻辑计划是“扫描students表,过滤age>18,选择name列”。
-
-
逻辑优化(Catalyst优化器)
-
Catalyst优化器对逻辑计划进行优化,例如:
-
合并多个过滤条件(
WHERE age>18 AND score>60
→ 合并成一个条件)。 -
提前过滤掉不需要的数据,减少计算量。
-
-
-
物理计划(Physical Plan)
-
将优化后的逻辑计划转换为具体的物理执行步骤(比如用哪种Join算法、是否广播小表)。
-
-
生成高效代码(Tungsten引擎)
-
Tungsten引擎将物理计划编译成Java字节码,生成高效的机器代码,最终转化为RDD操作。
-
-
分布式执行
-
任务分发到集群节点,并行执行,结果返回给用户。
-
关键优化技术:
-
Catalyst优化器:像“智能管家”,自动优化查询逻辑(如谓词下推、列裁剪)。
-
Tungsten引擎:像“加速器”,生成高效代码,避免JVM性能瓶颈。
三、DataFrame、DataSet和SQL的使用
1. DataFrame
定义:
-
DataFrame是一个分布式数据集合,类似数据库表或Excel表格,每列有明确的名称和类型(Schema)。
-
底层是RDD,但通过Schema知道数据结构,因此比RDD更高效。
特点:
-
动态类型:运行时检查类型(例如Python、R的DataFrame)。
-
操作方式:支持SQL式操作(如
df.filter("age > 18")
)或链式API。
示例代码(Python):
python
# 创建DataFrame df = spark.read.json("students.json")# SQL查询 df.createOrReplaceTempView("students") result = spark.sql("SELECT name FROM students WHERE age > 18")# DataFrame API操作 result = df.select("name").where(df["age"] > 18)
2. DataSet
定义:
-
DataSet是强类型的DataFrame(仅Java/Scala支持),每个字段类型在编译时确定。
特点:
-
类型安全:编译时检查类型错误(例如误操作字段类型会报错)。
-
性能优化:结合了RDD的类型操作和DataFrame的优化能力。
示例代码(Scala):
scala
case class Student(name: String, age: Int) val ds: Dataset[Student] = spark.read.json("students.json").as[Student] ds.filter(_.age > 18).select("name")
3. SQL查询
使用场景:
-
适合熟悉SQL的用户,直接写SQL语句操作数据。
示例:
sql
CREATE TEMPORARY VIEW students AS SELECT * FROM json.`students.json`; SELECT name, AVG(score) FROM students GROUP BY name;
对比总结
特性 | SQL | DataFrame | DataSet |
---|---|---|---|
类型检查 | 运行时 | 运行时 | 编译时(强类型) |
语言支持 | 所有语言 | Python/Java/Scala/R | Java/Scala |
适用场景 | 简单查询 | 复杂数据处理 | 类型安全需求高 |
性能 | 相同(底层都经过Catalyst优化) |
最终总结
-
Spark SQL是什么:处理结构化数据的工具,支持SQL和编程API。
-
运行原理:SQL→解析→逻辑计划→优化→物理计划→生成代码→分布式执行。
-
如何选择:
-
简单查询用SQL;
-
复杂逻辑用DataFrame/DataSet;
-
需要类型安全选DataSet(Java/Scala)。
-
生活化例子
一、什么是Spark SQL?
1. 举个栗子🌰:你有一张Excel表格
假设你有一张学生成绩表,长这样:
姓名 | 年龄 | 成绩 |
---|---|---|
张三 | 18 | 90 |
李四 | 17 | 85 |
王五 | 19 | 95 |
问题:你想做两件事:
-
找出年龄≥18岁的学生
-
计算每个人的平均分
如果用Excel,你可能点筛选,或者写公式。但如果是100万行数据呢?Excel卡死,这时就需要更强大的工具——Spark SQL!
2. Spark SQL是啥?
-
本质:一个专门处理表格数据的工具(比如Excel表、数据库表)。
-
功能:可以用写SQL(类似Excel公式)的方式,快速分析海量数据。
-
优点:比传统编程简单,还能自动优化计算速度!
一句话总结:
Spark SQL = 处理超大Excel表格的智能工具,支持用SQL或简单代码操作数据。
二、Spark SQL运行原理(超简化版)
1. 想象你是一个快递分拣员
假设你有一堆快递(数据),需要按城市分类。流程如下:
-
接订单(写SQL或代码)
-
比如:“把北京和上海的快递分出来”
-
-
拆解任务(解析SQL)
-
明白要分“北京”和“上海”
-
-
优化路线(Catalyst优化器)
-
发现可以先分北方再分南方,减少跑腿次数
-
-
派任务给小哥(生成物理计划)
-
让A小哥负责北京,B小哥负责上海
-
-
小哥干活(分布式执行)
-
多个小哥同时分拣,速度快!
-
关键点:
-
Catalyst优化器:像“智能大脑”,自动帮你优化任务步骤。
-
分布式计算:多人(多台机器)一起干活,处理超快!
三、DataFrame、DataSet、SQL怎么用?
1. DataFrame:像“高级Excel表”
-
特点:
-
每列有名字和类型(比如“年龄”是数字,“姓名”是文本)。
-
支持用SQL或代码操作,像Excel筛选、排序。
-
举个栗子🌰:
python
# 读取数据(就像打开Excel文件) df = spark.read.csv("学生表.csv")# 筛选年龄≥18岁的学生(像Excel的筛选功能) df_filtered = df.filter(df["年龄"] >= 18)# 计算平均分(像Excel的公式) df_avg = df.groupBy("姓名").avg("成绩")
2. DataSet:更严格的DataFrame(仅Java/Scala)
-
特点:
-
编译时检查类型(比如“年龄”列误写成文本会直接报错)。
-
适合重视安全性的场景(比如银行数据)。
-
举个栗子🌰:
scala
// 定义学生类型(类似先设计Excel表头) case class Student(name: String, age: Int, score: Double)// 读取数据并转为DataSet(像导入Excel并锁定表结构) val ds: Dataset[Student] = spark.read.csv("学生表.csv").as[Student]// 筛选年龄≥18岁(如果写错字段名,编译时就报错!) ds.filter(_.age >= 18)
3. SQL:直接写查询语句
-
适合场景:
-
熟悉SQL的人,想快速查数据。
-
举个栗子🌰:
sql
-- 创建临时视图(相当于把Excel表命名为students) CREATE TEMP VIEW students AS SELECT * FROM csv.`学生表.csv`;-- 直接写SQL查询 SELECT name, AVG(score) FROM students WHERE age >= 18 GROUP BY name;
四、对比总结(小白版)
工具 | 使用方式 | 优点 | 缺点 |
---|---|---|---|
SQL | 直接写SELECT语句 | 简单、快 | 复杂逻辑难写 |
DataFrame | 用Python/Java代码操作表 | 灵活,适合复杂操作 | 需要学API |
DataSet | 强类型版的DataFrame | 安全,避免低级错误 | 只能用Java/Scala |
五、一句话选择指南
-
想快速查数据 → SQL
-
需要处理复杂逻辑 → DataFrame
-
写Java/Scala且怕出错 → DataSet
六、真实应用场景
例子:分析电商用户行为
-
用SQL统计每日订单量:
sql
SELECT date, COUNT(*) FROM orders GROUP BY date;
-
用DataFrame找出消费最高的用户:
python
df.groupBy("user_id").sum("amount").orderBy("sum(amount)", ascending=False)
-
用DataSet确保数据不出错(比如金额必须是数字)。
最后总结:
Spark SQL = 处理海量表格的神器
-
写SQL或简单代码就能分析数据
-
自动优化计算速度(Catalyst引擎)
-
和Excel操作逻辑类似,只是更强大!
相关文章:
Spark SQL概述(专业解释+生活化比喻)
专业解释 一、什么是Spark SQL? 一句话定义: Spark SQL是Apache Spark中专门处理结构化数据的模块,可以让你像操作数据库表一样处理数据,支持用SQL查询或编程API(DataFrame/DataSet)分析数据。 通俗理解…...
LX3-初识是单片机
初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...
第二章 Logback的架构(一)
Logback的架构 Logback作为一个通用框架,可以应对不同场景的日志记录。目前,Logback 被划分为三个模块:logback-core、logback-classic 和 logback-access。 Logback的core模块为其他两个模块提供基础支持。classic模块扩展了core模块&…...
开发指南:构建结合数字孪生、大语言模型与知识图谱的智能设备日志分析及生产异常预警系统
1. 引言:数字孪生、大语言模型与知识图谱在智能制造中的融合 智能制造和工业4.0的浪潮正在重塑全球制造业格局,其核心在于利用先进的数字技术实现生产过程的实时决策、效率提升、灵活性增强和敏捷性改进。在这一转型过程中,数字孪生…...
【TeamFlow】4.1 Git使用指南
以下是 Git 在 Windows 系统上的配置和使用指南,包含详细步骤和注意事项: 安装 Git for Windows 下载与安装 前往 Git 官网 下载 Windows 版安装包 双击安装,关键选项建议: 选择 Use Git from Git Bash only(推荐&…...
HADOOP 3.4.1安装和搭建(尚硅谷版~)
目录 1.配置模版虚拟机 2.克隆虚拟机 3.在hadoop102安装JDK 4.完全分布式运行模式 1.配置模版虚拟机 1.安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存2G、硬盘20G(有需求的可以配置4G内存,50G硬盘) 2.hado…...
通过Docker Desktop配置OpenGauss数据库的方法(详细版+图文结合)
文章目录 通过Docker Desktop配置OpenGauss数据库的方法**一、下载Docker Desktop,并完成安装**docker官网:https://www.docker.com/ **二、下载OpenGauss压缩包**安装包下载链接:https://opengauss.obs.cn-south-1.myhuaweicloud.com/7.0.0-…...
文件有几十个T,需要做rag,用ragFlow能否快速落地呢?
一、RAGFlow的优势 1、RAGFlow处理大规模数据性能: (1)、RAGFlow支持分布式索引构建,采用分片技术,能够处理TB级数据。 (2)、它结合向量搜索和关键词搜索,提高检索效率。 …...
SystemVerilog语法之内建数据类型
简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗…...
TensorFlow和PyTorch学习原理解析
这里写目录标题 TensorFlow和PyTorch学习&原理解析TensorFlow介绍原理部署适用场景 PyTorch介绍原理部署适用场景 Keras模型格式SavedModelONNX格式 TensorFlow和PyTorch学习&原理解析 TensorFlow 介绍 由 Google Brain 团队开发并于 2015 年开源。由于 Google 的强…...
悬空引用和之道、之禅-《分析模式》漫谈57
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第5章“对象引用”原文: Unless you can catch all such references, there is the risk of a dangling reference, which often has painful con…...
江湖密码术:Rust中的 bcrypt 加密秘籍
前言 江湖险恶,黑客如雨,昔日密码“123456”早被各路大侠怒斥为“纸糊轻功”。若还执迷不悟,用明文密码闯荡江湖,无异于身披藏宝图在集市上狂奔,目标大到闪瞎黑客双眼。 为护你安然度过每一场数据风波,特献上一门绝学《Rust加密神功》。核心招式正是传说中的 bcrypt 密…...
NLP高频面试题(四十八)大语言模型中的思维链(CoT)技术详解
引言 大语言模型(LLM)在近年的飞速发展,让机器在各种任务上表现出令人瞩目的能力。然而,与人类不同,传统的语言模型往往倾向于直接给出答案,而缺乏可解释的中间推理过程。这在复杂推理任务中成为瓶颈:模型可能由于一步推理不当而得出错误结论,却没有过程可供检查。为了…...
对接点餐接口需要有哪些准备?
以下是一般点餐接口对接的相关信息,包括常见的接口功能、对接步骤及注意事项等: 常见接口功能 餐厅信息查询:获取合作餐厅的基本信息,如餐厅名称、地址、营业时间、联系电话、菜单等。菜品查询:查询具体餐厅的菜品详情…...
LintCode第192题-通配符匹配
描述 给定一个字符串 s 和一个字符模式 p ,实现一个支持 ? 和 * 的通配符匹配。匹配规则如下: ? 可以匹配任何单个字符。* 可以匹配任意字符串(包括空字符串)。 两个串完全匹配才算匹配成功。 样例 样例1 输入: "aa&q…...
uv运行一个MCP Server的完整流程
uv是一个高性能的Python包管理器,专注于性能提升。与pip相比,uv利用全局模块缓存,减少磁盘空间使用,并支持Linux、Windows和macOS系统。安装uv可以通过多种方式实现,例如使用Homebrew、Pacman、pip等。 step 1 安装uv:…...
ts中的类型
在 TypeScript 中,类型是静态类型系统的核心,用于在编译阶段检查代码的正确性。TypeScript 提供了丰富的类型系统,包括基本的原始类型、复合类型、以及用户自定义的类型。以下是对 TypeScript 中各种类型的详细分类和说明: 1. 原…...
把dll模块注入到游戏进程的方法_基于文件修改的注入方式
1、概述 本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种…...
判断点是否在多边形内
代码段解析: const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); 第一部分:(yi > y) !== (yj > y) 作用:检查点 (x,y) 的垂直位置是否跨越多边形的当前边。 yi > y 和 yj > y 分别检查边的两个端…...
【形式化验证基础】活跃属性Liveness Property和安全性质(Safety Property)介绍
文章目录 一、Liveness Property1、概念介绍2、形式化定义二、Safety Property1. 定义回顾2. 核心概念解析3. 为什么强调“有限前缀”4. 示例说明4.1 示例1:交通信号灯系统4.2 示例2:银行账户管理系统5. 实际应用的意义三. 总结一、Liveness Property 1、概念介绍 在系统的…...
Linux——信号(2)信号保存与捕捉
一、信号的保存 上次我们说到,捕捉一个信号后有三种处理方式:默认、忽略、自定义,其中自定义我们用signal系统调用完成,至于忽略信号,也需要signal实现,比如我现在想忽略2号信号,则:…...
Vue的模板编译过程
👨 作者简介:大家好,我是Taro,全栈领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、编程范式的分类1.编程范式分为声明式和命令…...
空间应用中心AI4S空间科学实验研究成果发表于《中国科学院院刊》
编者寄语: 和鲸基于旗下数据科学协同平台ModelWhale赋能,助力了中国科学院空间应用工程与技术中心系统开展了基于空间科学实验领域的AI4S创新研究。中国科学院空间应用工程与技术中心在空间科学实验领域的研究覆盖了多模态空间科学实验数据模式挖掘、领…...
【Python网络爬虫开发】从基础到实战的完整指南
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:基础静态页面抓取案例2:动…...
乐家桌面纯净版刷机ROM下载 乐家桌面纯净版2025官方最新下载
还在苦苦寻找一款好用的电视桌面,为智能电视焕新体验?别在乐家桌面纯净版刷机 ROM 下载和官方最新版下载上纠结啦,试试乐看家桌面,给你带来意想不到的惊喜! 乐家桌面纯净版或许曾吸引过你,但乐看家桌面在众…...
深度学习-全连接神经网络
四、参数初始化 神经网络的参数初始化是训练深度学习模型的关键步骤之一。初始化参数(通常是权重和偏置)会对模型的训练速度、收敛性以及最终的性能产生重要影响。下面是关于神经网络参数初始化的一些常见方法及其相关知识点。 官方文档参考࿱…...
n2n 搭建虚拟局域网,实现内网穿透
一、ubuntu linux系统上通过源码安装 1、下载源码 git clone https://github.com/ntop/n2n 2、 进入源码目录n2n,依次执行下列命令 ./autogen.sh # 如果提示命令不存在,需要运行命令:apt-get update && apt-get install autoconf…...
SystemVerilog语法之定宽数组
1.2定宽数组 1.2.1定宽数组的声明和初始化 Verilog要求在声明中必须给出数组的上下界。因为几乎所有数组都使用0作为索引下界,所以SystemVerilog允许只给出数组宽度的便捷声明方式。SystemVerilog的$clog2()函数可以计算以2为底的对数向上舍入值。你可以通过在变量…...
SQL 使用 UPDATE FROM 语法进行更新
UPDATE FROM 是一种常见的 SQL 语法模式,允许你基于其他表的数据来更新目标表。这种语法在不同数据库系统中有所不同,下面我将介绍几种主要数据库的实现方式。 PostgreSQL/SQL Server 语法 UPDATE target_table SET target_column source_table.source…...
如何在LangChain中构建并使用自定义向量数据库
1. 自定义向量数据库对接 向量数据库的发展非常迅速,几乎每隔几天就会出现新的向量数据库产品。LangChain 不可能集成所有的向量数据库,此外,一些封装好的数据库可能存在 bug 或者其他问题。这种情况下,我们需要考虑创建自定义向…...
极狐GitLab Git LFS 速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Git LFS 速率限制 (BASIC SELF) Git LFS (Large File Storage) 是一个用于处理大文件的Git扩展。如果您在仓库中使用 Git LF…...
如何查询IP地址是否被占用?
IP地址占用查询的重要性 在当前高度发达的网络环境下,IP地址作为网络设备间通信的基础,其管理显得尤为重要。IP地址占用查询作为网络管理的一个重要环节,具有以下几点重要性: 预防IP冲突:当两个或多个设备使用相同的I…...
数字后端实现教程 | 时钟树综合IMPCCOPT-1304错误Debug思路和解决方案
今天上午有学员在做公司自己项目CTS时发现跑不下去,报了如下所示的错误IMPCCOPT-4375。 复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例 第一次遇到这种错误,其实可以从提示信息上入手。 Term CLK_AVDD_SS is power /ground ÿ…...
AI 大模型在教育革命中的角色重塑:从知识传递者到认知伙伴
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从“教”与“学”到“共知”时代的开启 教育的本质是什么?是教师传授知识,学生被动接受?还是引导思维、激发潜能、陪伴成长? 在过去数百年里,教育形式经历了从口述、印刷、广播到互…...
Spring如何通过XML注册Bean
在上一篇当中我们完成了对三种资源文件的读写 上篇内容:Spring是如何实现资源文件的加载 Test public void testClassPathResource() throws IOException { DefaultResourceLoader defaultResourceLoader new DefaultResourceLoader(); Resource resource …...
Compose Multiplatform Android Logcat工具
一、通过adb发送指令,收集设备日志并保存 二、UI 三、代码 /*** 获取设备列表*/fun getDevices(): List<String> {val process ProcessBuilder("adb", "devices").redirectErrorStream(true).start()val output process.inputStream.…...
智能照明系统:照亮智慧生活的多重价值
在当今科技飞速发展的时代,智能照明系统正以其独特的优势改变着人们的生活和工作方式。这套集成了物联网、人工智能等先进技术的照明解决方案,不仅实现了基本的照明功能,更在节能环保、健康舒适、安全防护等多个维度展现出卓越价值。 从能源管…...
XMC4800 芯片深度解读:架构、特性、应用与开发指南
一、芯片定位与核心优势 XMC4800是英飞凌(Infineon)推出的高性能微控制器(MCU),属于 XMC4000系列,基于 ARM Cortex-M4内核,主打 工业控制、电机驱动、物联网(IoT) 和 嵌入式系统 应用。其核心优势在于: 多核异构处理:集成Cortex-M4(144MHz,带FPU和DSP指令集)与专…...
class com.alibaba.fastjson.JSONObject cannot be cast to class
class com.alibaba.fastjson.JSONObject cannot be cast to class 在做接口测试的时候,携带一个可用的token,打算debug看看代码的执行过程,由于Redis配置类的不完整导致报错 这是原本的Redis配置类 Configuration public class RedisConfig {BeanSuppressWarnings(value {&…...
二叉树操作与遍历实现
二叉树操作与遍历实现 二叉树操作与遍历实现树的相关概念1.树的相关术语2.二叉树的概念3.二叉树的存储结构1.顺序结构2.链式结构 1. 二叉树的创建树的表示1.1 创建节点1.2 构建二叉树 2. 二叉树的销毁3. 二叉树的遍历3.1 前序遍历3.2 中序遍历3.3 后序遍历3.4 层序遍历 4. 二叉…...
VSCode连接服务器跑深度学习代码相关问题(研0大模型学习第八天)
VS Code 远程连接服务器:从环境配置到代码运行与常见问题解决实录 在使用 VS Code 通过 Remote-SSH 连接到远程服务器进行 Python 开发,特别是涉及 Anaconda 环境和深度学习项目时,可能会遇到各种各样的问题。本文记录并解答了我在配置和运行…...
软件工程中的维护类型
目录 前言1. 排错性维护1.1 排错性维护的定义与重要性1.2 排错性维护的实践与挑战 2. 适应性维护2.1 适应性维护的定义与背景2.2 适应性维护的实施策略 3. 完善性维护3.1 完善性维护的定义与目标3.2 完善性维护的实施挑战与技巧 4. 预防性维护4.1 预防性维护的定义与作用4.2 预…...
软件工程(1)
#灵感# 记录一下软件工程的相关基础知识。 按马哲的说法,不能光有实践,也需要相关理论。 定义:软件工程涉及软件开发、维护、管理等多方面的原理、方法、工具和环境。此篇主要讲软件开发中的基本方法。 已知问题:旧的软件开发主要…...
递归的模板 (以反转链表为例)
我们再来回顾一下递归的模板,终止条件,递归调用,逻辑处理。 func reverseList(head *ListNode) *ListNode {// 终止条件if head nil || head.Next nil {return head}// 逻辑处理(可能有,也可能没有,具体…...
02-HTML结构
一、URL 1.1.URL的格式 1.2.URL和URI的区别 URI指逻辑或资源的标识符,URL是地址,URL是URI的子集 二、HTML文件结构 2.1.文档声明 默认告诉浏览器是html5页面,必须放在文档最前面 <!DOCTYPE html>2.2.HTML各元素结构 是根元素&…...
C++ vector 核心功能解析与实现
目录 整体结构概述 赋值运算符重载 下标运算符重载 内存管理函数 元素访问函数 插入和删除操作 完整代码 在C标准库中, vector 是一个非常常用的动态数组容器,它能够自动管理内存,并且提供了丰富的操作接口。本文将通过分析一段手写 …...
【Linux网络】构建UDP服务器与字典翻译系统
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
DeepSeek 大模型 + LlamaIndex + MySQL 数据库 + 知识文档 实现简单 RAG 系统
DeepSeek 大模型 LlamaIndex MySQL 数据库 知识文档 实现简单 RAG 系统 以下是一个使用 DeepSeek 大模型(假设为一个高性能的中文大模型)、LlamaIndex、MySQL 数据库 和 知识文档 实现简单 RAG(检索增强生成)系统的完整示例。该…...
【FFmpeg从入门到精通】第四章-FFmpeg转码
1 FFmpeg 软编码H.264与H.265 当前网络中常见的视频编码格式要数H.264最为火热,支持H.264的封装格式有很多,如FLV、MP4、HLS(M3U8)、MKV、TS等格式;FFmpeg本身并不支持H.264的编码器,而是由FFmpeg的第三方模块对其进行支持,例如x…...
爱普生RX8130CE实时时钟成为智能家居系统的理想解决方案
智能家居的本质是让生活更便捷、舒适与智能,而精准的时间管理是实现这一目标的重要基础。爱普生 RX8130CE 实时时钟(RTC)以其卓越的性能和丰富的功能,成为智能家居系统的理想时间解决方案,为用户打造更加智能化、人性化…...