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

Spring AI(1)—— 基本使用

Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是将 Spring 生态系统设计原则应用于 AI 领域。

Spring AI 提供以下功能:

  • 支持所有主要的 AI 模型提供商,例如 Anthropic、OpenAI、Microsoft、Amazon、Google 和 Ollama等。
  • 支持跨 AI 提供商对同步和流式处理 API 选项的可移植 API 支持。
  • 支持结构化输出 - AI 模型输出到 POJO 的映射。
  • 支持所有主要的向量数据库提供商,例如 Apache Cassandra、Azure Vector Search、Chroma、Milvus、MongoDB Atlas、Neo4j、Oracle、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
  • 支持跨向量存储提供商的可移植 API,包括一种新颖的类似 SQL 的元数据过滤器 API。
  • 工具/函数调用 - 允许模型请求执行客户端工具和函数,从而根据需要访问必要的实时信息。
  • 可观察性。
  • 用于数据工程的文档注入 ETL 框架。
  • AI 模型评估 - 帮助评估生成的内容并防止幻觉响应的实用程序。
  • ChatClient API - 用于与 AI 聊天模型通信的 Fluent AP。
  • Advisors API - 封装重复的生成式 AI 模式,转换发送到和传出语言模型 (LLM) 的数据,并提供跨各种模型和用例的可移植性。
  • 支持 Chat Conversation Memory(聊天记忆) and Retrieval Augmented Generation (RAG)。
  • 针对所有 AI 模型和向量存储提供Spring Boot的自动配置和启动器。

下面,我们通过具体的案例来学习下Spring AI的使用。

导入jar

新建spring boot项目,使用spring ai时,spring boot使用3.0以上版本,jdk使用17及以上版本。

<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

本例调用智谱大模型,还需要导入如下jar:

<!--     m7以后使用该pom   -->
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-zhipuai</artifactId>
</dependency>

注意:本例使用spring ai的1.0.0-SNAPSHOT版本,如果使用1.0.0-M6及之前的版本,导入的智谱的artifactId为spring-ai-zhipuai-spring-boot-starter。

yml配置

spring:ai:zhipuai:api-key: XXXXXXXXXXXXXX # 智谱的apikeychat:options:model: glm-4-flashtemperature: 0.7

本例测试智谱大模型的调用,api-key使用读者自己申请的key。

配置类

package com.renr.springainew.common;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringAiConfig {// 创建ChatClient对象@Beanpublic ChatClient chatClient(ZhiPuAiChatModel chatModel) {return ChatClient.builder(chatModel).build();}}

调用模型的代码

package com.renr.springainew.controller;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
public class ChatController {@Resourceprivate ZhiPuAiChatModel chatModel;@Resourceprivate ChatClient client;@GetMapping("/chat")public String chat(String message) {String answer = this.chatModel.call(message);System.out.println(answer);return "success";}@GetMapping("/chat2")public String chat2(String message) {String answer = this.client.prompt("你好").call().content();System.out.println(answer);return "success";}}

本例使用两种方式调用智谱的大模型:

  • 通过ZhipuAiChatModel对象
  • 通过ChatClient对象,ChatClient支持函数调用、聊天记忆、RAG等高级功能

打印请求和响应的日志

修改配置类

package com.renr.springainew.common;import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringAiConfig {@Beanpublic SimpleLoggerAdvisor simpleLoggerAdvisor() {// 创建SimpleLoggerAdvisor实例,可以传递日志级别等配置参数(此处为默认配置)return new SimpleLoggerAdvisor();}@Beanpublic ChatClient chatClient(ZhiPuAiChatModel chatModel) {return ChatClient.builder(chatModel)// 设置系统消息.defaultSystem("你是一个java架构师")//配置日志相关的Advisor,需要开启日志级别以及配置 默认debug级别.defaultAdvisors(simpleLoggerAdvisor()).build();}//    @Bean
//    public ChatClient chatClient(ZhiPuAiChatModel chatModel) {
//        return ChatClient.builder(chatModel).build();
//    }}

Spring AI的Advisors API 提供了一种灵活而强大的方法来拦截、修改和增强 Spring AI的应用。 通过利用 Advisors API,开发人员可以创建更复杂、可重用和可维护的 AI 组件。本例使用SimpleLoggerAdvisor提供日志打印功能。

另外,在创建ChatClient对象时,我们还设置了系统消息。聊天大模型一般包含三种消息类型:系统消息、用户消息和Ai返回的消息。

yml中增加日志配置

logging:level:org.springframework.ai.chat.client.advisor: DEBUG

调用http://localhost:8080/chat2测试

请求数据日志如下:

request: ChatClientRequest[prompt=Prompt{messages=[SystemMessage{textContent='你是一个java架构师', messageType=SYSTEM, metadata={messageType=SYSTEM}}, UserMessage{content='你好', properties={messageType=USER}, messageType=USER}], modelOptions=org.springframework.ai.zhipuai.ZhiPuAiChatOptions@bd71d690}, context={}]

响应日志如下:

response: {"result" : {"metadata" : {"finishReason" : "STOP","contentFilters" : [ ],"empty" : true},"output" : {"messageType" : "ASSISTANT","metadata" : {"finishReason" : "STOP","role" : "ASSISTANT","id" : "202505072240346deb3a95109d44d9","messageType" : "ASSISTANT"},"toolCalls" : [ ],"media" : [ ],"text" : "作为一位虚拟的Java架构师,我很高兴能为您提供帮助。请问有什么具体的技术问题或者架构设计上的挑战需要我协助您解决吗?"}},"metadata" : {"id" : "202505072240346deb3a95109d44d9","model" : "glm-4-flash","rateLimit" : {"requestsLimit" : 0,"tokensLimit" : 0,"requestsReset" : 0.0,"tokensReset" : 0.0,"tokensRemaining" : 0,"requestsRemaining" : 0},"usage" : {"promptTokens" : 13,"completionTokens" : 33,"totalTokens" : 46,"nativeUsage" : {"completion_tokens" : 33,"prompt_tokens" : 13,"total_tokens" : 46}},"promptMetadata" : [ ],"empty" : false},"results" : [ {"metadata" : {"finishReason" : "STOP","contentFilters" : [ ],"empty" : true},"output" : {"messageType" : "ASSISTANT","metadata" : {"finishReason" : "STOP","role" : "ASSISTANT","id" : "202505072240346deb3a95109d44d9","messageType" : "ASSISTANT"},"toolCalls" : [ ],"media" : [ ],"text" : "作为一位虚拟的Java架构师,我很高兴能为您提供帮助。请问有什么具体的技术问题或者架构设计上的挑战需要我协助您解决吗?"}} ]
}

相关文章:

Spring AI(1)—— 基本使用

Spring AI 是一个用于 AI 工程的应用程序框架。 其目标是将 Spring 生态系统设计原则应用于 AI 领域。 Spring AI 提供以下功能&#xff1a; 支持所有主要的 AI 模型提供商&#xff0c;例如 Anthropic、OpenAI、Microsoft、Amazon、Google 和 Ollama等。支持跨 AI 提供商对同…...

深入浅出HTML:构建现代网页的基石

深入浅出HTML&#xff1a;构建现代网页的基石 引言 在数字世界的基石中&#xff0c;HTML&#xff08;HyperText Markup Language&#xff09;始终扮演着不可替代的角色。作为万维网的核心语言&#xff0c;HTML经历了30年的演变&#xff0c;从简单的文档标记发展到支持复杂Web…...

ai说什么是注解,并以angular ts为例

在编程中&#xff0c;注解&#xff08;Annotation&#xff09; 是一种特殊的语法结构&#xff0c;用于为代码添加元数据&#xff08;metadata&#xff09;&#xff0c;从而在不修改代码逻辑的情况下&#xff0c;提供额外的信息或指示编译器、框架、工具如何处理这些代码。注解通…...

【存储管理—动态不等长存储资源分配算法】

文章目录 一、实验目的二、实验内容与设计思想实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解动态异长存储分区资源管理&#xff0c;掌握所需数据结构和管理程序&#xff0c;了解各种存储分配算法的优点和缺点。 二、实验内容与设计思想 实验内容 1.分析uni…...

【25软考网工】第五章(8)路由协议RIP、OSPF

目录 一、路由协议--RIP 1. RIP协议 1&#xff09;RIPv1与RIPv2对比 2. 距离矢量路由协议 1&#xff09;距离矢量路由协议特点 2&#xff09;RIP路由的度量值 3&#xff09;路由优先级 4&#xff09;RIP防环机制 3. 应用案例 1&#xff09;例题:RIPv1与RIPv2区别 2&…...

日常开发中,iOS 性能调优我们怎么做?

日常开发中&#xff0c;iOS 性能调优我们怎么做&#xff1f;聊聊我用过的几款工具 最近在给一个 iOS 视频类 App 做性能优化&#xff0c;过程中踩了不少坑&#xff0c;也用了一些不错的工具&#xff0c;今天就以一个开发者视角随便聊聊我在调试过程中的一些经验。 一、性能问…...

JNDI 注入原理解析

文章目录 JNDI基础概述JNDI SPI命名服务目录服务 JNDI演示查询 DNS 服务查询 LDAP 服务条目动态协议切换 JNDI 注入漏洞 JNDI基础 概述 JNDI&#xff08;Java Naming and Directory Interface&#xff09;是Java提供的标准命名和目录接口&#xff0c;通过统一的API使应用程序…...

Android开发-视图基础

在Android应用开发中&#xff0c;视图&#xff08;View&#xff09;是构建用户界面的基本元素。无论是按钮、文本框还是复杂的自定义控件&#xff0c;它们都是基于View类或其子类实现的。掌握视图的基础知识对于创建功能强大且美观的应用至关重要。本文将深入探讨Android中的视…...

Prometheus实战教程:k8s平台-Redis监控案例

以下是 Prometheus 自动发现 Redis 实例的完整 YAML 文件示例&#xff0c;适用于生产环境。该配置包括&#xff1a; Redis 部署&#xff1a;运行 Redis 实例。Redis Exporter&#xff1a;用于暴露 Redis 指标。Prometheus 自动发现&#xff1a;通过 Kubernetes 服务发现自动抓…...

Prompt Engineering 提示词工程学习

一、Prompt Engineering 简介 Prompt Engineering 是设计和优化输入提示(Prompt)以获得预期输出的过程。在与大型语言模型(如 GPT-4)交互时,如何构造提示会显著影响模型的回答质量。 二、Prompt 的重要性 提高生成准确性:通过正确的 Prompt 引导,模型能够更好地理解用…...

数造科技携 DataBuilder 亮相安徽科交会,展现“DataOps +AI”双引擎魅力

近日&#xff0c;数造科技受邀参加第三届中国&#xff08;安徽&#xff09;科技创新成果转化交易。 作为国内领先的数据开发与治理平台提供商&#xff0c;数造科技携带其核心产品 DataBuilder 精彩亮相 “新一代信息技术展区”&#xff0c;吸引了众多参会者的目光。 关于 DataB…...

Linux/AndroidOS中进程间的通信线程间的同步 - 共享内存

在之前的文章中介绍了允许无关进程共享内存区域以便执行 IPC 的技术&#xff1a;共享文件映射。但他存在一些不足。 使用一个共享文件映射来进行 IPC 要求创建一个磁盘文件&#xff0c;即使无需对共享区域进行持久存储也需要这样做。除此之外&#xff0c;这种技术还会带来一些…...

ES6入门---第三单元 模块七: Proxy的使用+Reflect的使用

proxy: 代理 扩展(增强)对象、方法(函数)一些功能 比如: Vue Vue.config.keyCodes.enter65 Proxy作用: 比如vue中拦截 预警、上报、扩展功能、统计、增强对象等等 proxy是设计模式一种&#xff0c; 代理模式 语法: new Proxy(target, handler); …...

【JAVA】BigDecimal判断是否为0, / by zero的问题修复

bug场景 我要处理一个任务完成率的计算&#xff0c;任务完成率pct 实际值 real / 任务值 task 进入计算前&#xff0c;我需要判断task是否为空&#xff0c;或者为0&#xff0c;防止除法出错。 之前使用了equal方法 if(!task.equals(BigDecimal.ZERO))//开始计算因为刚开始测…...

从 “机器人 +“ 到 “+ 机器人“:算力政策撬动的产业生态革命

在深圳光明科学城的云端算力平台上&#xff0c;数据以每秒千万次的速度流动&#xff0c;这里每年发放的 600 万元算力补贴&#xff0c;正如同催化剂般激活着人形机器人产业的深层变革。当广东将 "算力券" 政策精准嵌入珠三角制造体系&#xff0c;一场从 "单机智…...

如何在24G显存机器上搭建一个超过gpt效果的DeepSeek-R1?

DeepSeek-R1蒸馏模型概述与应用指南 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5af5a8b13de14bd1a95837bbf1ccaf2a.png#pic_center) 引言 DeepSeek-R1作为一款先进的AI推理模型&#xff0c;在性能上已超越GPT-4o和Claude-3.5等主流开源模型。为满足更广泛应用…...

seamless_communication,facebook推出的开源语音翻译项目

Seamless Communication‌是由Facebook Research开发的一个开源项目&#xff0c;旨在提供先进的语音和文本翻译功能&#xff0c;支持多国语音。 今天试着来复现下。 1、首先下载代码。 git clone https://github.com/facebookresearch/seamless_communication 2、按照步骤执…...

C++从入门到实战(十二)详细讲解C++如何实现内存管理

C从入门到实战&#xff08;十二&#xff09;详细讲解C如何实现内存管理 前言一、C内存管理方式1. new/delete操作内置类型2. 异常与内存管理的联系&#xff08;简单了解&#xff09;3. new和delete操作自定义类型 二、 operator new与operator delete函数&#xff08;重点&…...

console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI

​一、软件介绍 文末提供程序和源码下载 console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI&#xff0c;与 AI 模型聊天的终极 CLI 伴侣&#xff0c;直接从命令行享受与 OpenAI、MistralAI、Anthropic、xAI、Google AI、DeepSeek、阿里巴巴、Inception 或 Ollama 托管…...

影刀RPA开发-程序备注说明的必要性

1. 备注指令的调用 1.1 指令搜索 搜索出备注指令后&#xff0c;添加到代码框中 1.2 快捷输入 在代码框中&#xff0c;输入指令关键字&#xff0c;可以快速展示出相关指令 2.备注指令内容设置 备注信息要依据代码执行的功能书写 尽量写明该语句或该段落代码的功能作用 单行…...

第十节:图像处理基础-图像算术运算 (加法、减法、混合)

引言 在计算机视觉领域&#xff0c;图像算术运算是最基础却至关重要的核心技术。无论是实现简单的图片合成、开发智能监控系统&#xff0c;还是构建复杂的医学影像分析工具&#xff0c;加减运算和混合操作都扮演着关键角色。OpenCV作为最流行的计算机视觉库&#xff0c;提供了…...

如何使用UGUI的EventTrigger

前言 在 Unity 的 UGUI 系统中,EventTrigger 是一个强大的组件,允许开发者监听和处理多种 UI 交互事件。以下是详细的使用方法、示例代码、优缺点分析以及注意事项。 一、EventTrigger 基本用法 1. 添加 EventTrigger 组件 在 Unity 编辑器中选中 UI 对象(如 But…...

5G赋能农业物联网:智能化种植的新纪元

5G赋能农业物联网&#xff1a;智能化种植的新纪元 在农业领域&#xff0c;精准化、智能化已成为现代农业发展的方向。而5G的出现&#xff0c;让农业物联网&#xff08;Agri-IoT&#xff09;突破了传统的瓶颈&#xff0c;真正实现了实时监测、高效数据传输、智能化决策&#xf…...

LeetCode 热题 100 64. 最小路径和

LeetCode 热题 100 | 64. 最小路径和 大家好&#xff0c;今天我们来解决一道经典的动态规划问题——最小路径和。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求找到从网格的左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 问题描述 给定一个包含非负…...

精益数据分析(45/126):媒体网站商业模式的深度剖析与挑战应对

精益数据分析&#xff08;45/126&#xff09;&#xff1a;媒体网站商业模式的深度剖析与挑战应对 在创业和数据分析的领域中&#xff0c;探索不同商业模式的运作机制和关键要点是提升业务能力的重要途径。今天&#xff0c;我们依旧带着共同进步的目标&#xff0c;深入研读《精…...

学习Linux的第四天

今天我们来学习Linux的网络配置&#xff0c;以及链表的知识开个小头 三种网络配置模式 桥接模式&#xff08;用的最多&#xff09; 2.Nat模式 3. 仅主机模式&#xff08;Nat模式的功能外&#xff0c;只能在局域网通信&#xff0c;不能访问外网&#xff09; 桥接模式&#xf…...

AGV导航控制器技术方案——基于EFISH-SBC-RK3576/SAIL-RK3576的国产化革新‌(新一代工业级自主可控解决方案)‌

一、方案核心架构 ‌1. 硬件拓扑设计‌ ‌主控单元‌&#xff1a;SAIL-RK3576核心板&#xff08;八核A72A53M0异构架构&#xff09;‌传感器层‌&#xff1a; 双激光雷达&#xff08;RS-LiDAR-16线 SICK TIM240&#xff09;9轴IMU&#xff08;BMI088&#xff09; 轮式编码器&…...

ISCC 2025练武题 WP部分

总结 垃圾比赛&#xff0c;垃圾题目&#xff0c;纯脑洞题&#xff0c;技术好不好没得关系&#xff0c;就看你脑洞大不大。 web里塞misc&#xff0c;re里塞misc真是牛逼他妈给牛逼开门牛逼到家。 逆天平台&#xff0c;卡的一批&#xff0c;靶机还是公用的&#xff0c;把flag删…...

mysql:什么是一致性视图(Read View)

一致性视图&#xff08;Read View&#xff09;是 MVCC&#xff08;多版本并发控制&#xff09;中的核心概念&#xff0c;用于实现事务隔离性。 它是一个逻辑概念&#xff0c;让事务在读取数据时看到特定时间点的数据库快照&#xff0c;而不受其他事务并发修改的影响。 一致性…...

android中背压问题面试题及高质量回答范例

&#x1f3af; 回答的目标是&#xff1a; 表现出你理解背压的本质&#xff08;不是框架知识&#xff0c;而是系统层面的问题&#xff09;。 能清晰讲出几种处理背压的方案&#xff08;理论 实战&#xff09;。 能结合 Android 场景讲具体例子&#xff08;比如 UI 线程、网络…...

【C++】C++11(上)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; C学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大…...

工具分享:通过滑块拉取CAN报文信号数值自动发送报文

0. 概述 CAN报文发送工具使用wxpython进行开发,配套Excel模板可以通过修改Excel自定义界面展示的信号名称和信号的属性;同时,工具支持导入现场采集的报文数据自动按照配套Excel模板定义的报文发送周期进行模拟发送。 由于是我好几年前开发的作品,一些开发细节也记得不是很…...

android 折叠屏开发适配全解析:多窗口、铰链处理与响应式布局

安卓适配折叠屏指南 折叠屏设备为安卓开发带来了新的机遇和挑战。以下是适配折叠屏的关键要点&#xff1a; 1. 屏幕连续性检测 // 检查设备是否支持折叠屏特性 private fun isFoldableDevice(context: Context): Boolean {return context.packageManager.hasSystemFeature(&…...

Cloudera CDP 7.1.3 主机异常关机导致元数据丢失,node不能与CM通信

问题描述 plaintext ERROR Could not load post-deployment data from /var/run/cloudera-scm-agent/process/ccdeploy_hadoop-conf_etchadoopconf.cloudera.yarn_-8903374259073700469 IOError: [Errno 2] No such file or directory: /var/run/cloudera-scm-agent/proce…...

超越 DeepSeek-R1,英伟达新模型登顶

近日&#xff0c;英伟达发布全新开源模型系列 Llama-Nemotron&#xff0c;凭借卓越性能引发业界关注&#xff0c;有望重塑开源 AI 格局。 该系列在推理能力上超越 DeepSeek-R1&#xff0c;内存效率与吞吐量显著提升。其创新采用合成数据监督微调与强化学习训练&#xff0c;全方…...

centos8.5.2111 更换阿里云源

使用前提是服务器可以连接互联网 1、备份现有软件配置文件 cd /etc/yum.repos.d/ mkdir backup mv CentOS-* backup/ 2、下载阿里云的软件配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 3、清理并重建…...

阿里云平台与STM32的物联网设计

基于阿里云平台与STM32的物联网设计方案可结合硬件选型、通信协议、云端配置及功能实现等多个维度进行设计。以下是综合多个参考案例的详细设计方案&#xff1a; 一、硬件选型与架构设计 主控芯片选择 STM32系列&#xff1a;推荐使用STM32F103&#xff08;如STM32F103ZET6、STM…...

ESP32- 开发笔记- 软件开发 6 蓝牙协议栈 1

1 蓝牙 ESP32 是一款支持蓝牙功能的强大微控制器&#xff0c;ESP-IDF (Espressif IoT Development Framework) 提供了完整的蓝牙开发支持。 1.1 蓝牙模式 ESP32 支持两种蓝牙模式&#xff0c;即同时支持经典蓝牙和低功耗蓝牙。 1.1.1 蓝牙经典 (BT/BDR/EDR) 支持传统蓝牙协…...

python爬虫爬取网站图片出现403解决方法【仅供学习使用】

基于CSDN第一篇文章&#xff0c;Python爬虫之入门保姆级教程&#xff0c;学不会我去你家刷厕所。 这篇文章是2021年作者发表的&#xff0c;由于此教程&#xff0c;网站添加了反爬机制&#xff0c;有作者通过添加cookie信息来达到原来的效果&#xff0c;Python爬虫添加Cookies以…...

利用动态数字孪生:Franka Research 3 机械臂在机器人策略评估中的创新实践——基于Real-is-Sim框架的仿真与现实闭环验证

一、前言&#xff1a; 在机器人技术飞速发展的今天&#xff0c;如何高效、准确地评估机器人在现实世界中的操作策略&#xff0c;成为制约机器人技术进一步突破的关键瓶颈。传统方法往往依赖于耗时且成本高昂的真实世界测试&#xff0c;而模拟环境虽能提供便利&#xff0c;却因…...

Spark-Core(RDD行动算子)

一、RDD行动算子 行动算子就是会触发action的算子&#xff0c;触发action的含义就是真正的计算数据。 1、reduce 函数签名&#xff1a; def reduce(f: (T, T) > T): T 函数说明&#xff1a;聚集 RDD 中的所有元素&#xff0c;先聚合分区内数据&#xff0c;再聚合分区间…...

spark转换算子

在 Apache Spark 中&#xff0c;转换算子&#xff08;Transformation&#xff09;是用于对 RDD&#xff08;弹性分布式数据集&#xff09;进行转换操作的函数。这些操作是惰性的&#xff0c;即在调用转换算子时&#xff0c;Spark 并不会立即执行计算&#xff0c;而是记录下转换…...

hadoop的运行模式

&#xff08;一&#xff09;Hadoop的运行模式 hadoop一共有如下三种运行方式&#xff1a; 1. 本地运行。数据存储在linux本地&#xff0c;测试偶尔用一下。我们上一节课使用的就是本地运行模式hadoop100。 2. 伪分布式。在一台机器上模拟出 Hadoop 分布式系统的各个组件&#x…...

力扣——25 K个一组翻转链表

目录 1.题目描述&#xff1a; 2.算法分析&#xff1a; 3.代码展示&#xff1a; 1.题目描述&#xff1a; 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总…...

React Router Vs Vue Router

文章目录 前言✅ React Router vs Vue Router 对比一览&#x1f9e9; React Router 的底层原理简述① 路由声明与匹配&#xff08;基于 JSX&#xff09;② 历史模式管理③ 响应式状态处理④ 路由渲染机制&#xff08;Outlet&#xff09; ✅ 总结&#xff1a;原理是否一样&#…...

Spark中RDD算子的介绍

引言 在大数据处理领域&#xff0c;Apache Spark凭借其高效性和灵活性备受青睐。而弹性分布式数据集&#xff08;Resilient Distributed Datasets&#xff0c;简称RDD&#xff09;则是Spark的核心数据结构。RDD算子作为操作RDD的关键工具&#xff0c;掌握它们对于充分发挥Spar…...

Vivo 手机官网交互效果实现解析

在现代网页设计中&#xff0c;流畅的滚动交互和精美的视觉效果是提升用户体验的关键。本文将深入解析 Vivo 手机官网 Demo 中的一个核心交互效果 —— 基于滚轮滚动的内容展示系统。这个系统允许用户通过滚动鼠标滚轮来浏览不同的手机镜头配置信息&#xff0c;同时伴随平滑的过…...

powershell批处理——io校验

powershell批处理——io校验 在刷题时&#xff0c;时常回想&#xff0c;OJ平台是如何校验竞赛队员提交的代码的&#xff0c;OJ平台并不看代码&#xff0c;而是使用“黑盒测试”&#xff0c;用测试数据来验证。对于每题&#xff0c;都事先设定了很多组输入数据&#xff08;data…...

AI——认知建模工具:ACT-R

ACT-R&#xff08;Adaptive Control of Thought—Rational&#xff09;是一种用于模拟人类认知过程的计算架构&#xff0c;广泛应用于心理学、认知科学和人工智能研究。它通过模块化的方式模拟记忆、注意力、学习、决策等认知机制。以下是ACT-R的核心概念、安装方法、基础语法及…...

Docker 容器镜像环境的依赖导出

#工作记录 如果我们想获取 Docker 容器中已有镜像的所有的依赖包信息&#xff0c;包括其他可能的系统依赖&#xff0c;用于在其他环境&#xff08;如 WSL 或 Windows&#xff09;中重新搭建相同的运行环境。 以下是完整的步骤&#xff1a; 1. 导出 Python 依赖&#xff08;r…...