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

SparkSQL数据源与数据存储

文章目录

  • 1. 大数据分析流程
  • 2. Spark SQL数据源
    • 2.1 SparkSQL常见数据源
    • 2.2 SparkSQL支持的文本格式
    • 2.3 加载外部数据源步骤
  • 3. 本地文件系统加载数据
    • 3.1 本地文件系统加载JSON格式数据
      • 3.1.1 概述
      • 3.1.2 案例演示
    • 3.2 本地文件系统加载CSV格式数据
      • 3.2.1 概述
      • 3.2.2 案例演示
    • 3.3 本地文件系统加载TEXT格式数据
      • 3.3.1 概述
      • 3.3.2 案例演示
    • 3.4 本地文件系统加载Parquet格式数据
      • 3.4.1 概述
      • 3.4.2 案例演示
    • 3.5 通用加载文件方式加载各种格式数据
      • 3.5.1 概述
      • 3.5.2 案例演示
  • 4. 大数据存储概述
    • 4.1 数据存储的重要性
    • 4.2 常见的数据持久化外部系统
    • 4.3 大数据计算框架的基石
  • 5. 数据存储核心API使用
    • 5.1 持久化数据到外部文件系统步骤
    • 5.2 将数据帧保存到本地文件
    • 5.3 将数据帧保存到HDFS文件
  • 6. 数据源与数据存储小结

1. 大数据分析流程

  • 在互联网产业中大数据生态体系的主要作用就是存储、处理海量数据为企业创造价值、推动社会进步,数据分析流程存在三个主要流程:
    • 计算系统可以加载外部数据源
    • 资源系统可以为计算系统分配运行资源
    • 计算系统数据分析最终结果可以持久化到外部系统
      在这里插入图片描述
  • 通过图片可以得知存储系统才是大数据计算体系中的基石,学习一个计算框架应该先从如何使用当前计算框架加载外部数据源开始。

2. Spark SQL数据源

  • Spark SQL 是 Apache Spark 的模块之一,提供对结构化数据的查询能力。它支持多种数据源,包括 HDFS、S3、Hive、Parquet、JSON 等,允许用户通过 SQL 语句或 DataFrame API 访问和处理数据。Spark SQL 的优化器可以自动优化查询计划,提高执行效率。此外,它还支持外部数据源的集成,使得在不同存储系统间进行数据交换和分析变得简单快捷。

2.1 SparkSQL常见数据源

  • Hive 数据仓库
  • MySQL 关系型数据库
  • FileSystem 文件系统:本地文件系统、分布式文件系统
  • 由 RDD 生成 SparkSQL 数据源

2.2 SparkSQL支持的文本格式

数据格式描述
csvCSV(字段与字段之间的分隔符为逗号)
jsonJSON(是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构、易于人阅读和编写,同时也易于机器解析和生成)
textText(文本数据,字段与字段之间的分隔符没有限制)
parquetParquet(Parquet是一种面向列存储的文件格式,主要用于Hadoop生态系统。
对数据处理框架、数据模型和编程语言无关)

2.3 加载外部数据源步骤

  • 创建 SparkSession 实例对象
  • 通过 SparkSession 实例对象提供的方法加载外部数据

3. 本地文件系统加载数据

3.1 本地文件系统加载JSON格式数据

3.1.1 概述

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。在本地文件系统中加载JSON格式数据时,可以使用DataFrameReaderjson()方法或通过format("json")指定格式。

3.1.2 案例演示

  • 在项目根目录创建data目录
    在这里插入图片描述
  • data里创建users.json文件
{"name": "李小玲", "gender": "女", "age": 45}
{"name": "童安格", "gender": "男", "age": 26}
{"name": "陈燕文", "gender": "女", "age": 18}
{"name": "王晓明", "gender": "男", "age": 32}
{"name": "张丽华", "gender": "女", "age": 29}
{"name": "刘伟强", "gender": "男", "age": 40}
{"name": "赵静怡", "gender": "女", "age": 22}
{"name": "孙强东", "gender": "男", "age": 35}

在这里插入图片描述

  • net.huawei.sql包里创建LoadJSON对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:加载JSON数据* 作者:华卫* 日期:2025年01月17日*/
object LoadJSON {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadJSON") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 使用json()方法加载本地JSON文件val df_json = spark.read.json("data/users.json")// 显示数据df_json.show()// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

3.2 本地文件系统加载CSV格式数据

3.2.1 概述

  • CSV(Comma-Separated Values)是一种常用的表格数据存储格式,数据以纯文本形式存储,字段间用逗号分隔。加载CSV格式数据时,可以使用DataFrameReadercsv()方法或通过format("csv")指定格式。

3.2.2 案例演示

  • data里创建users.csv文件
    在这里插入图片描述
name,gender,age
李小玲,女,45
童安格,男,26
陈燕文,女,18
王晓明,男,32
张丽华,女,29
刘伟强,男,40
赵静怡,女,22
孙强东,男,35
  • net.huawei.sql包里创建loadCSV对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession
import org.apache.spark.sql.execution.datasources.csv.MultiLineCSVDataSource.inferSchema
import org.json4s.scalap.scalasig.ClassFileParser.header/*** 功能:加载CSV数据* 作者:华卫* 日期:2025年01月17日*/
object LoadCSV {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadCSV") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 使用csv()方法加载本地CSV文件val df_csv = spark.read.option("header", "true").option("inferSchema", "true").csv("data/users.csv")// 显示数据df_csv.show()// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

3.3 本地文件系统加载TEXT格式数据

3.3.1 概述

  • TEXT格式数据通常指纯文本文件,每行数据作为一个字符串处理。加载TEXT格式数据时,可以使用DataFrameReadertext()方法或通过format("text")指定格式。

3.3.2 案例演示

  • data里创建users.txt文件
    在这里插入图片描述
李小玲 女 45
童安格 男 26
陈燕文 女 18
王晓明 男 32
张丽华 女 29
刘伟强 男 40
赵静怡 女 22
孙强东 男 35
  • net.huawei.sql包里创建LoadText对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.{DataFrame, SparkSession}/*** 功能:加载TEXT数据* 作者:华卫* 日期:2025年01月17日*/
object LoadText {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadTEXT") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 使用text()方法加载本地TEXT文件val df_text = spark.read.text("data/users.txt")// 显示数据df_text.show()// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

3.4 本地文件系统加载Parquet格式数据

3.4.1 概述

  • Parquet 是一种列式存储格式,广泛用于大数据处理。相比行式存储(如 CSV),Parquet 具有高效压缩、高性能查询和广泛兼容性(支持 Spark、Hive 等)。在 Spark 中,可通过 parquet()format("parquet") 加载 Parquet 文件,适合大规模数据存储与处理。

3.4.2 案例演示

  • 将CSV格式数据转换成Parquet格式数据
  • net.huawei.sql包里创建CSVToParquet对象
    在这里插入图片描述
package net.huawei.sql/*** 功能:将CSV转成Parquet* 作者:华卫* 日期:2025年01月17日*/
import org.apache.spark.sql.SparkSessionobject CSVToParquet {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("CSV To Parquet") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 读取CSV文件val df = spark.read.option("header", true) // 第一行作为列名.option("inferSchema", true) // 自动推断数据类型.csv("data/users.csv") // CSV文件路径// 打印Schema和数据println("===模式===")df.printSchema()println("===数据===")df.show()// 将DataFrame保存为Parquet文件df.write.parquet("data/users.parquet")println("成功生成users.parquet文件~")// 关闭Spark会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述
  • 查看users.parquetParquet文件是二进制格式,无法直接查看,但可以通过Spark或其他工具读取。
    在这里插入图片描述
  • net.huawei.sql包里创建LoadParequet对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:加载Parquet数据* 作者:华卫* 日期:2025年01月17日*/
object LoadParquet {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadParquet") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 使用parquet()方法加载本地Parquet文件val df_parquet = spark.read.parquet("data/users.parquet")// 显示数据df_parquet.show()// 显示数据结构df_parquet.printSchema()// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

3.5 通用加载文件方式加载各种格式数据

3.5.1 概述

  • 通过DataFrameReaderformat()load()方法,可以灵活地加载不同格式的数据文件。这种方式不仅适用于JSON格式,还可以用于CSV、TEXT、Parquet等其他格式。

3.5.2 案例演示

  • net.huawei.sql包里创建LoadData对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:加载各种格式数据* 作者:华卫* 日期:2025年01月17日*/
object LoadData {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadData") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象//使用format()和load()方法加载本地JSON文件val df_json = spark.read.format("json").load("data/users.json")//使用format()和load()方法加载本地CSV文件val df_csv = spark.read.format("csv").option("header", true).option("inferSchema",true).load("data/users.csv")//使用format()和load()方法加载本地TEXT文件val df_text = spark.read.format("text").load("data/users.txt")//使用format()和load()方法加载本地Parquet文件val df_parquet = spark.read.format("parquet").load("data/users.parquet")// 显示数据println("===显示加载的JSON数据===")df_json.show()println("===显示加载的CSV数据===")df_csv.show()println("===显示加载的TEXT数据===")df_text.show()println("===显示加载的Parquet数据===")df_parquet.show()// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

4. 大数据存储概述

4.1 数据存储的重要性

  • 在大数据生态系统中,存储系统是核心组成部分。无论是数据采集、数据处理,还是数据分析,都离不开高效、可靠的存储系统。存储系统不仅需要保存原始数据,还需要存储经过分析后的有价值的结果,以供各部门使用。

4.2 常见的数据持久化外部系统

  • 文件系统:包括本地文件系统和分布式文件系统(如HDFS)。文件系统适合存储大规模的非结构化或半结构化数据。
  • 关系型数据库:适用于结构化数据的存储和高效查询,常用于事务处理和复杂查询。
  • Hive数据仓库:基于Hadoop的数据仓库工具,适合大规模数据的批处理和分析。
  • 其他存储系统:如果以上系统不能满足业务需求,我们可以将DataFrame或DataSet转换为RDD,利用RDD支持的多种外部存储系统。

4.3 大数据计算框架的基石

  • 存储系统是大数据计算框架的基石。一个计算框架首先需要从存储系统中加载数据,形成可处理的数据模型(如DataFrameDataSetRDD)。基于这些数据模型,我们可以进行各种数据分析操作。最终,分析结果需要持久化到外部存储系统,以便各部门使用。

5. 数据存储核心API使用

5.1 持久化数据到外部文件系统步骤

  • 创建SparkSession实例对象
  • 通过SparkSession实例对象提供的方法加载外部数据
  • 数据分析
  • 对数据分析结果进行持久化

5.2 将数据帧保存到本地文件

  • net.huawei.sql包里创建SaveData对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:保存数据到本地文件* 作者:华卫* 日期:2025年01月17日*/
// 声明用户样例类
case class User(name: String, gender: String, age: Long)object SaveData {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("SaveData") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 导入隐式转换import spark.implicits._// 基于序列创建数据帧val userDF = Seq(User("陈燕文", "女", 20),User("张小文", "男", 27),User("王丽霞", "女", 18)).toDF()// 显示数据userDF.show()// 保存数据到本地文件userDF.write.mode("overwrite").save("log/users.parquet")println("users.parquet保存成功~")userDF.write.mode("overwrite").csv("log/users.csv")println("users.csv保存成功~")userDF.write.mode("overwrite").json("log/users.json")println("users.json保存成功~")// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述
  • 查看保存在本地的各种格式的数据文件
    在这里插入图片描述

5.3 将数据帧保存到HDFS文件

  • net.huawei.sql包里创建SaveDataToHDFS对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:保存数据到HDFS* 作者:华卫* 日期:2025年01月17日*/
object SaveDataToHDFS {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("SaveDataToHDFS") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.config("dfs.client.use.datanode.hostname", "true") // 设置HDFS节点名称.getOrCreate() // 获取或创建Spark会话对象// 导入隐式转换import spark.implicits._// 基于序列创建数据帧val userDF = Seq(User("陈燕文", "女", 20),User("张小文", "男", 27),User("王丽霞", "女", 18)).toDF()// 显示数据userDF.show()// 保存数据到HDFS文件userDF.write.mode("overwrite").json("hdfs://bigdata1:9000/log/users.json")println("hdfs://bigdata1:9000/log/users.json保存成功~")// 关闭会话对象spark.stop()}
}
  • 运行程序,查看结果
    在这里插入图片描述

  • 执行命令:hdfs dfs -ls /log/users.json
    在这里插入图片描述

  • 执行命令:hdfs dfs -cat /log/users.json/*
    在这里插入图片描述

6. 数据源与数据存储小结

  • 在大数据生态系统中,数据源和数据存储是核心组成部分。Spark SQL 支持多种数据源,包括 HDFS、S3、Hive、Parquet、JSON 等,能够灵活加载和处理结构化数据。通过 DataFrameReaderDataFrameWriter,用户可以轻松地从本地文件系统或分布式文件系统加载数据,并将分析结果持久化到外部存储系统。常见的存储格式如 CSV、JSON、Parquet 各有优势:CSV 适合人类阅读,JSON 灵活易用,而 Parquet 则以高效的列式存储和压缩性能著称。数据存储不仅是数据处理的起点,也是分析结果的归宿,选择合适的存储格式和系统对提升数据处理效率至关重要。

相关文章:

SparkSQL数据源与数据存储

文章目录 1. 大数据分析流程2. Spark SQL数据源2.1 SparkSQL常见数据源2.2 SparkSQL支持的文本格式2.3 加载外部数据源步骤 3. 本地文件系统加载数据3.1 本地文件系统加载JSON格式数据3.1.1 概述3.1.2 案例演示 3.2 本地文件系统加载CSV格式数据3.2.1 概述3.2.2 案例演示 3.3 本…...

【BQ3568HM开发板】开箱测试

引言 很荣幸入选了“电子发烧友”的贝启科技BQ3568HM开源鸿蒙开发板评测活动,上周在出差,今天才有机会开箱一下开发板,简单测试一下。 开机测试 插上电源开机后,系统显示的是润和的DAYU的logo,看来厂商提供的软件包…...

3D 模型格式转换之 STP 转 STL 深度解析

在 3D 模型的多元世界中,格式如同语言,不同格式适用于不同场景。STP 和 STL 是两种常见格式,本文将深入剖析 STP 转 STL 的相关内容。 一、STP 与 STL 格式基础 (一)STP 格式剖析 STP,即标准交换格式&am…...

MySQL数据库的数据文件保存在哪?MySQL数据存在哪里

在安装好MySQL数据库使用一段时间后,会产生许多的数据库和数据。那这些数据库的数据文件存放在本地文件夹的什么位置呢 一、默认位置 一般来说MySQL数据库的数据文件都是存放在data文件夹之中,但是根据使用的存储引擎不同,产生的一些文件也…...

低代码系统-UI设计器核心介绍

为什么会有UI设计器 最开始的UI设计器其实是为了满足企业门户的需求而产生的,后面因为表单设计器的功能有限,所以干脆就用了一套设计器。 UI设计器从功能使用上来说,跟表单设计器没有多大区别,只是多了组件和加强了事件和组件的能…...

ubuntu20.04有亮度调节条但是调节时亮度不变

尝试了修改grub文件,没有作用,下载了brightness-controllor,问题解决了。 sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt update sudo apt install brightness-controller 之后在应用软件中找到brightness-contro…...

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的,有利于深入理解串口通讯底层原理,但其开发效率较低;对此,我们这里再讲基于HAL库实现的串口通讯轮询案例,实现高效开发。当然,本次案例需求仍然和前面寄…...

【前端】CSS学习笔记(2)

目录 CSS3新特性圆角阴影动画keyframes 创建动画animation 执行动画timing-function 时间函数direction 播放方向过渡动画(transition) 媒体查询设置meta标签媒体查询语法 雪碧图字体图标 CSS3新特性 圆角 使用CSS3border-radius属性,你可以…...

【esp32小程序】小程序篇02——连接git

一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…...

echarts柱状图象形图,支持横向滑动

展示效果 代码 let xData [2020,2021,2022,2023, 2024, 2025, 2026]; let yData [267,2667,2467,2667, 3234, 4436,666]; option {grid: {left: 5%,right: 5%,top: 15%,bottom: 5%,containLabel: true},// 滚动条dataZoom: [{show: true,type: inside,zoomLock: true,throt…...

YOLO系列代码

Test-Time Augmentation TTA (Test Time Augmentation)是指在test过程中进行数据增强。其思想非常简单,就是在评测阶段,给每个输入进行多种数据增广变换,将一个输入变成多个输入,然后再merge起来一起输出,形成一种ensemble的效果,可以用来提点。参考:​​​​​​​​​…...

HTML根元素<html>的语言属性lang:<html lang=“en“>

诸神缄默不语-个人CSDN博文目录 在编写HTML页面时&#xff0c;通常会看到<html lang"en">这行代码&#xff0c;特别是在网页的开头部分&#xff0c;就在<!DOCTYPE html>后面。许多开发者可能对这个属性的含义不太了解&#xff0c;它到底有什么作用&…...

opencv在图片上添加中文汉字(c++以及python)

opencv在图片上添加中文汉字&#xff08;c以及python&#xff09;_c opencv绘制中文 知乎-CSDN博客 环境&#xff1a; ubuntu18.04 desktopopencv 3.4.15 opencv是不支持中文的。 这里C代码是采用替换原图的像素点来实现的&#xff0c;实现之前我们先了解一下汉字点阵字库。…...

Perplexity AI 周六向 TikTok 母公司字节跳动递交了一项提案

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

Java连接TDengine和MySQL双数据源

git文件地址&#xff1a;项目首页 - SpringBoot连接TDengine和MySQL双数据源:SpringBoot连接TDengine和MySQL双数据源 - GitCode 1、yml配置 spring:datasource:druid:mysql:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: roo…...

Web3 游戏周报(1.13 - 1.19)

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【1.13–1.19】Web3 游戏行业动态 索尼区块解决方案实验室 (Sony BSL) 宣布其以太坊 L2 区块链 Soneium 主网上线。Hyve Labs 融资 275 万美元&#xff0c;推动 Web3 游戏基础设…...

[深度学习]机器学习和深度学习

机器学习和深度学习 文章目录 机器学习和深度学习人工智能与机器学习和深度学习的关系侠义的机器学习深度学习的概念常见的神经网络的输入形式想要的输出(任务类别)深度学习的流程 线性函数与多层神经元 人工智能与机器学习和深度学习的关系 所谓人工智能就是&#xff0c;让计算…...

区块链技术

区块链是一个信息技术领域的术语&#xff0c;它代表了去中心化、安全性高、透明度强的分布式账本技术。以下是对区块链的详细介绍&#xff1a; 一、定义与基本原理 区块链&#xff08;Blockchain&#xff09;是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案…...

vim函数定义跳转相关设置

修改下vim的一些ctags相关快捷键&#xff0c;个人用着顺手点。 小结如下&#xff1a; normal模式下的gk&#xff0c;用来打开一个预览窗口预览函数定义&#xff08;需要ctags生成好tags文件&#xff09;。normal模式下的gd&#xff0c;修改映射为ctrl]&#xff0c;即跳转到函…...

如何使用Python爬虫获取微店商品详情:代码示例与实践指南

在电商领域&#xff0c;获取商品详情数据对于商家和开发者来说至关重要。微店作为国内知名的电商平台&#xff0c;提供了丰富的商品数据接口&#xff0c;方便开发者通过API调用获取商品详情。本文将详细介绍如何使用Python爬虫获取微店商品详情&#xff0c;并提供具体的代码示例…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

李沐--动手学深度学习--GRU

1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...