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

【Elasticsearch】开启大数据分析的探索与预处理之旅

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

【Elasticsearch】开启大数据分析的探索与预处理之旅

一、引言

在当今数字化时代,数据呈爆炸式增长,大数据分析已成为企业和组织挖掘有价值信息、获取竞争优势的关键手段。在大数据分析项目的初期阶段,数据科学家面临着一项艰巨的任务:对海量的原始数据进行探索和预处理。这一环节犹如大厦的基石,直接影响着后续分析工作的质量和效率。

数据探索旨在深入了解数据的结构内容分布情况,帮助数据科学家发现数据中的潜在模式、异常值以及数据之间的关联关系。而数据预处理则是对原始数据进行清洗、转换和整合,以提高数据的质量和可用性,为后续的特征提取、模型训练等步骤奠定良好的基础。

传统的数据探索和预处理工具在面对大规模数据时往往显得力不从心,效率低下。幸运的是,Elasticsearch 的出现为我们提供了一个强大的解决方案。Elasticsearch 是一个基于 Lucene 库构建的分布式、开源搜索引擎,它不仅擅长快速的全文搜索,还具备强大的数据存储和分析能力,能够高效地处理大规模数据,使其成为大数据分析领域数据探索与预处理的得力助手。

我们将深入探讨如何利用 Elasticsearch 对大数据进行探索与预处理。我们将详细介绍相关的技术概念、数据类型、索引结构等基础知识,展示实际案例中所用到的 Maven 依赖,并提供每一步详细的代码示例及清晰注释,最后还会给出具体的单元测试和预期输出,让您全面掌握利用 Elasticsearch 进行大数据分析前期工作的方法与技巧。

二、需要用到的关键ES数据结构

(一)数据类型

  1. 文本类型(text):用于存储文本数据,如文章内容、用户评论等。Elasticsearch 会对文本进行分词处理,以便进行全文搜索。例如,在一个新闻文章数据集里,文章的正文可以存储为 text 类型,这样就可以方便地搜索文章中包含的特定关键词或短语。
  2. 关键字类型(keyword):适用于精确匹配的字符串数据,如身份证号、订单号等。与 text 类型不同,keyword 类型不会进行分词,数据将被完整地存储和匹配。比如,在电商订单数据中,订单编号字段就可以设置为 keyword 类型,以确保精确查询订单。
  3. 数值类型(如 long、integer、float、double 等):分别用于存储不同范围和精度的数值数据。在处理销售数据时,商品价格可以存储为 float 或 double 类型,而商品数量则可以存储为 integer 类型。
  4. 日期类型(date):用于存储日期和时间信息。可以按照特定的格式存储日期数据,如“yyyy-MM-dd HH:mm:ss”,方便进行日期范围查询和时间序列分析。例如,在日志数据中,记录事件发生的时间就可以使用 date 类型。

(二)索引结构

索引是 Elasticsearch 中存储数据的地方,类似于数据库中的表。一个索引可以包含多个类型(在 Elasticsearch 6.0 及以后版本中,类型逐渐被弱化,但在早期版本中类型是重要的概念)。索引具有以下重要的结构组成部分:

  1. 映射(Mapping):定义了索引中每个字段的数据类型、分词器以及其他属性。通过映射,Elasticsearch 知道如何对数据进行索引和搜索。例如,对于一个存储博客文章的索引,我们可以在映射中定义文章标题字段为 text 类型,并指定使用特定的分词器,而文章发布日期字段则定义为 date 类型。
  2. 文档(Document):是索引中的基本数据单元,类似于数据库中的行。每个文档都是一个 JSON 对象,包含了与索引相关的各种字段及其对应的值。例如,一篇博客文章的文档可能包含标题、作者、内容、发布日期等字段。

三、案例实现技术与 Maven 依赖

(一)技术概述

本案例将利用 Elasticsearch 的 Java API 来连接到 Elasticsearch 集群,实现数据的索引创建、数据插入、数据搜索与聚合等操作,从而完成数据探索与预处理的任务。我们将以一个包含海量文本数据的数据集为例,通过 Elasticsearch 的搜索和聚合功能,探索文本的主题分布、关键词频率等信息。

(二)Maven 依赖

在使用 Java 与 Elasticsearch 进行交互时,需要在项目的 pom.xml 文件中添加以下 Maven 依赖:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.9</version>
</dependency>
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.9</version>
</dependency>

上述依赖中,elasticsearch-rest-high-level-client 是用于与 Elasticsearch 进行高级别 REST 交互的客户端库,它提供了方便的 API 来执行各种操作。elasticsearch 核心库则包含了 Elasticsearch 的基本功能和数据结构相关的代码。

四、案例实现步骤及代码示例

(一)连接到 Elasticsearch 集群

首先,我们需要编写代码来连接到 Elasticsearch 集群。以下是一个简单的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;public class ElasticsearchConnection {// Elasticsearch 集群的主机地址和端口private static final String HOST = "localhost";private static final int PORT = 9200;public static RestHighLevelClient getClient() {// 创建 HttpHost 对象,指定主机和端口HttpHost host = new HttpHost(HOST, PORT, "http");// 创建 RestHighLevelClient 对象,用于与 Elasticsearch 集群进行交互return new RestHighLevelClient(RestClient.builder(host));}public static void main(String[] args) throws Exception {RestHighLevelClient client = getClient();// 这里可以添加一些测试代码,例如打印集群信息client.close();}
}

在上述代码中,我们首先定义了 Elasticsearch 集群的主机地址和端口,然后创建了 HttpHost 对象来表示集群的地址信息,最后通过 RestClient.builder 构建了 RestHighLevelClient 对象,该对象将用于后续的各种操作。在 main 方法中,我们获取了客户端连接,并在最后关闭了连接,以释放资源。

(二)创建索引及映射

接下来,我们创建一个用于存储文本数据的索引,并定义其映射。假设我们要存储博客文章数据,以下是创建索引和映射的代码示例:

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;public class CreateIndex {public static void createBlogIndex(RestHighLevelClient client) throws IOException {// 创建索引请求对象CreateIndexRequest request = new CreateIndexRequest("blog_index");// 设置索引的设置项,例如分片数量和副本数量request.settings(Settings.builder().put("index.number_of_shards", 3).put("index.number_of_replicas", 1));// 定义映射,指定文章标题为 text 类型,使用标准分词器,文章内容为 text 类型,文章发布日期为 date 类型String mapping = "{\n" +"  \"properties\": {\n" +"    \"title\": {\n" +"      \"type\": \"text\",\n" +"      \"analyzer\": \"standard\"\n" +"    },\n" +"    \"content\": {\n" +"      \"type\": \"text\",\n" +"      \"analyzer\": \"standard\"\n" +"    },\n" +"    \"publish_date\": {\n" +"      \"type\": \"date\",\n" +"      \"format\": \"yyyy-MM-dd HH:mm:ss\"\n" +"    }\n" +"  }\n" +"}";request.mapping(mapping, XContentType.JSON);// 执行创建索引操作CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);boolean acknowledged = response.isAcknowledged();if (acknowledged) {System.out.println("索引创建成功");} else {System.out.println("索引创建失败");}}public static void main(String[] args) throws Exception {RestHighLevelClient client = ElasticsearchConnection.getClient();createBlogIndex(client);client.close();}
}

在这段代码中,我们首先创建了 CreateIndexRequest 对象,并指定了索引名称为 “blog_index”。然后通过 settings 方法设置了索引的分片数量和副本数量。接着,我们定义了索引的映射,将文章标题、内容和发布日期分别定义为相应的类型,并指定了分词器和日期格式。最后,通过 client.indices().create 方法执行创建索引操作,并根据响应结果判断索引是否创建成功。

(三)插入数据

有了索引和映射后,我们可以向索引中插入数据。以下是插入一篇博客文章数据的示例代码:

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;public class InsertData {public static void insertBlogArticle(RestHighLevelClient client) throws IOException {// 创建索引请求对象IndexRequest request = new IndexRequest("blog_index");// 构建文档数据,这里是一篇博客文章的信息Map<String, Object> jsonMap = new HashMap<>();jsonMap.put("title", "Elasticsearch 在大数据分析中的应用");jsonMap.put("content", "本文介绍了如何使用 Elasticsearch 进行大数据分析中的数据探索与预处理工作,包括数据类型、索引结构等内容,并通过实际案例展示了其强大的功能。");jsonMap.put("publish_date", new Date());request.source(jsonMap, XContentType.JSON);// 执行插入数据操作IndexResponse response = client.index(request, RequestOptions.DEFAULT);String index = response.getIndex();String id = response.getId();// 打印插入结果信息System.out.println("数据插入成功,索引:" + index + ",文档 ID:" + id);}public static void main(String[] args) throws Exception {RestHighLevelClient client = ElasticsearchConnection.getClient();insertBlogArticle(client);client.close();}
}

在上述代码中,我们创建了 IndexRequest 对象,并指定了要插入数据的索引为 “blog_index”。然后构建了一个包含文章标题、内容和发布日期的 Map 对象,作为文档数据。通过 request.source 方法将文档数据设置到请求中,最后使用 client.index 方法执行插入操作,并打印插入结果的索引和文档 ID 信息。

(四)数据搜索与聚合

现在,我们可以利用 Elasticsearch 的搜索和聚合功能来探索数据。以下是一个查询文章标题中包含特定关键词的文章,并统计关键词频率的示例代码:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;public class SearchAndAggregate {public static void searchAndAggregate(RestHighLevelClient client) throws IOException {// 创建搜索请求对象SearchRequest request = new SearchRequest("blog_index");// 创建搜索源构建器SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();// 设置查询条件,查询标题中包含 "Elasticsearch" 的文章sourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));// 创建聚合构建器,统计关键词频率TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("keyword_agg").field("title.keyword");sourceBuilder.aggregation(aggregationBuilder);request.source(sourceBuilder);// 执行搜索操作SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 处理搜索结果Terms terms = response.getAggregations().get("keyword_agg");for (Terms.Bucket bucket : terms.getBuckets()) {System.out.println("关键词:" + bucket.getKey() + ",频率:" + bucket.getDocCount());}}public static void main(String[] args) throws Exception {RestHighLevelClient client = ElasticsearchConnection.getClient();searchAndAggregate(client);client.close();}
}

在这段代码中,我们首先创建了 SearchRequest 对象和 SearchSourceBuilder 对象。通过 QueryBuilders.matchQuery 设置了查询条件,即搜索标题中包含 “Elasticsearch” 的文章。然后使用 AggregationBuilders.terms 创建了一个聚合构建器,用于统计关键词频率,这里我们统计文章标题中的关键词频率(注意使用 title.keyword 是因为我们要精确统计关键词,而不是对分词后的文本进行统计)。最后,执行搜索操作并处理聚合结果,打印出关键词及其频率信息。

五、单元测试与预期输出

(一)单元测试

为了确保我们编写的代码功能正常,我们可以编写单元测试。以下是使用 JUnit 5 编写的针对上述代码功能的单元测试示例:

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.elasticsearch.client.RestHighLevelClient;import static org.junit.jupiter.api.Assertions.assertTrue;public class ElasticsearchTest {private RestHighLevelClient client;@BeforeEachpublic void setUp() throws Exception {client = ElasticsearchConnection.getClient();}@Testpublic void testCreateIndex() throws Exception {// 调用创建索引的方法CreateIndex.createBlogIndex(client);// 这里可以添加更多的断言来验证索引的创建是否符合预期,例如检查索引的设置、映射等assertTrue(true);}@Testpublic void testInsertData() throws Exception {// 调用插入数据的方法InsertData.insertBlogArticle(client);// 可以添加断言来验证数据是否成功插入,例如查询插入的数据是否存在assertTrue(true);}@Testpublic void testSearchAndAggregate() throws Exception {// 调用搜索和聚合的方法SearchAndAggregate.searchAndAggregate(client);// 可以添加断言来验证聚合结果是否符合预期,例如检查关键词频率是否正确assertTrue(true);}@AfterEachpublic void tearDown() throws Exception {client.close();}
}

在上述单元测试中,我们在每个测试方法之前通过 setUp 方法获取了 Elasticsearch 客户端连接,然后分别对创建索引、插入数据和搜索聚合功能进行了测试。在每个测试方法中,我们调用了相应的业务方法,并可以根据需要添加更多的断言来验证功能的正确性。最后,在 tearDown 方法中关闭了客户端连接。

(二)预期输出

  1. 创建索引:如果索引创建成功,控制台将输出 “索引创建成功”。
  2. 插入数据:数据插入成功后,控制台将输出 “数据插入成功,索引:blog_index,文档 ID:[具体的文档 ID]”。
  3. 搜索与聚合:对于搜索与聚合操作,将输出文章标题中关键词及其频率信息,例如:
关键词:`Elasticsearch`,频率:1

六、总结

在大数据分析领域,Elasticsearch 作为一款强大的数据存储和探索工具,为数据科学家提供了高效处理海量数据的能力。通过本文的详细介绍,我们了解了 Elasticsearch 的相关数据类型、索引结构等基础知识,掌握了如何使用 Java API 连接到 Elasticsearch 集群,创建索引、插入数据以及进行数据搜索与聚合操作。同时,通过单元测试和预期输出的展示,我们能够验证代码的正确性和功能的有效性。利用 Elasticsearch 的这些特性,我们可以在大数据分析项目的初期快速了解数据的结构、内容和分布情况,为后续的数据清洗、特征提取等预处理步骤提供有力的依据,从而提高整个大数据分析项目的效率和质量。

七、参考资料文献

  1. Elasticsearch 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
  2. Elasticsearch 实战》(作者:[美] 拉法尔·库奇 等)
  3. 相关技术博客和论坛讨论,如 Stack Overflow 等。

相关文章:

【Elasticsearch】开启大数据分析的探索与预处理之旅

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

【算法】欧几里得与拓展欧几里得算法

目录 一、欧几里得算法 二、拓展欧几里得算法 2.1 裴蜀定理 2.2 拓展欧几里得算法 2.3 例题 三、线性同余方程 3.1 概念 3.2 例题 一、欧几里得算法 欧几里得算法又称辗转相除法&#xff0c;可用于求解两个数的最大公约数 其思路&#xff1a; gcd(a, b) gcd(b, a%b…...

组合数的求法

1.如果是多组查询的话&#xff0c;需要用数组去储存阶乘的值 n!/(m!(n-m)!) P4071 [SDOI2016] 排列计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<cstdio> #include<iostream> #include<map> #include<cstring> #include<cmath&g…...

【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项

Docker版本陈旧也是搭建的环境起不来的一个重要原因&#xff0c;比如 --profile 选项是 Docker 20.10.0 版本及以上版本才开始支持的&#xff0c;在 Docker Compose v2.1&#xff08;及以上版本&#xff09;中引入用于对服务进行分组和按需启动。 更新 Docker Compose 到 v2.x…...

解决 java -jar 报错:xxx.jar 中没有主清单属性

问题复现 在使用 java -jar xxx.jar 命令运行 Java 应用程序时&#xff0c;遇到了以下错误&#xff1a; xxx.jar 中没有主清单属性这个错误表示 JAR 文件缺少必要的启动信息&#xff0c;Java 虚拟机无法找到应用程序的入口点。本文将介绍该错误的原因以及如何通过修改 pom.xm…...

AIGC-----AIGC在虚拟现实中的应用前景

AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性&#xff0c;这种组合不仅极大地降低了VR内容的…...

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…...

Selenium 自动化测试demo

场景描述&#xff1a; 模拟用户登录页面操作&#xff0c;包括输入用户名、密码、验证码。验证码为算数运算&#xff0c;如下&#xff1a; 使用到的工具和依赖&#xff1a; 1. Selenium&#xff1a;pip install selenium 2. 需要安装浏览器驱动&#xff1a;这里使用的是Edge 3…...

深度神经网络模型压缩学习笔记二:离线量化算法和工具、实现原理和细节

文章目录 一、离线量化基础概念二、离线量化难点三、离线量化算法介绍四、离线量化工具介绍五、离线量化工具整体设计结构六、离线量化工具代码解读七、实践&#xff1a;Dipoorlet量化MobileNet 一、离线量化基础概念 二、离线量化难点 三、离线量化算法介绍 四、离线量化工…...

uni-app运行 安卓模拟器 MuMu模拟器

最近公司开发移动端系统&#xff0c;使用真机时每次调试的时候换来换去的麻烦&#xff0c;所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器&#xff0c;如果系统…...

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》&#xff1a; - 这是中国网络安全的基本法律&#xff0c;于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务&#xff0c;包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》&#xff1a; …...

Perforce Automation With Python

11/2024 出版 MP4 |视频&#xff1a;h264&#xff0c; 19201080 |音频&#xff1a;AAC&#xff0c;44.1 KHz 语言&#xff1a;英语 |大小&#xff1a; 2.65 GB |时长&#xff1a; 5 小时 18 分钟 使用 Python 脚本简化与 Perforce 版本控制系统相关的生产流程 您将学 到什么 …...

卷积神经网络学习记录

目录 神经网络基础定义&#xff1a; 基本组成部分 工作流程 卷积层&#xff08;卷积定义&#xff09;【CONV】&#xff1a; 卷积层&#xff08;Convolutional Layer&#xff09; 特征提取&#xff1a;卷积层的主要作用是通过卷积核&#xff08;或滤波器&#xff09;运算提…...

Spring Cloud Alibaba

What is SCA Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件&#xff0c;方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。 依托Spring Cloud Alibaba&#xff0c;您只需要添加一些注解和少量…...

【AI绘画】Midjourney进阶:色调详解(上)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调白色调淡色调明色调 &#x1f4af…...

【滑动窗口】找到字符串中所有字母异位词

文章目录 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int sLen s.size(), pLen p.size(), validChar;// 母串长度比子串长度还小 直接返回空vectorif (sLen < pLen)return ret;// …...

C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写

final 关键字的作用 C11 引入了 final 关键字&#xff0c;用于阻止类被继承或阻止虚函数被进一步重写。 防止类被继承&#xff1a;在类声明后添加 final&#xff0c;表示该类不能被继承。防止虚函数被重写&#xff1a;在虚函数声明后添加 final&#xff0c;表示该虚函数在派生…...

sql漏洞

目录 SQL漏洞产生的原因 未对用户输入进行验证和过滤&#xff1a; 动态SQL语句的拼接&#xff1a; 不安全的数据库配置&#xff1a; 缺乏安全意识和培训&#xff1a; 使用过时的技术或框架&#xff1a; 如何避免SQL漏洞产生 使用参数化查询&#xff1a; 对用户输入进行…...

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…...

在 PyTorch 训练中使用 `tqdm` 显示进度条

在 PyTorch 训练中使用 tqdm 显示进度条 在深度学习的训练过程中&#xff0c;实时查看训练进度是非常重要的&#xff0c;它可以帮助我们更好地理解训练的效率&#xff0c;并及时调整模型或优化参数。使用 tqdm 库来为训练过程添加进度条是一个非常有效的方式&#xff0c;本文将…...

PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题

目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...

【Reinforcement Learning】强化学习下的多级反馈队列(MFQ)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

Cocos编辑器

1、下载 下载地址&#xff1a;https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…...

Linux kernel 堆溢出利用方法(三)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path&#xff08;虽然在高版本内核已经不可用了但ctf比赛还是比较常用的&#xff09;。在通过两道道近期比赛的赛题来讲解。 Arbitrary Address Allocation…...

文心一言与千帆大模型平台的区别:探索百度AI生态的双子星

随着人工智能技术的迅猛发展&#xff0c;越来越多的公司开始投入资源开发自己的AI解决方案。在中国&#xff0c;百度作为互联网巨头之一&#xff0c;不仅在搜索引擎领域占据重要位置&#xff0c;还在AI领域取得了显著成就。其中&#xff0c;“文心一言”和“千帆大模型平台”便…...

JavaWeb——SpringBoot原理

10.1. 配置优先级 10.1.1. 配置文件 properties > yml(推荐) > yaml 10.1.2. Java系统属性、命令行参数 命令行参数 > Java系统属性 > 配置文件 10.2. Bean管理 10.2.1. 手动获取bean ApplicationContext&#xff0c;IOC容器对象 10.2.2. bean作用域 10.2.3.…...

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…...

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述 在 Oracle RAC 环境中&#xff0c;有时会误将数据文件创建在本地目录&#xff0c;导致其他节点无法访问该数据文件&#xff0c;从而报出 ORA-01157 和 ORA-01110 错误。 问题分析 错误日志 Mon Nov 16 19:02:38 2021 Errors in file /u01/app/oracle/diag/rdbms/orc…...

使用R语言绘制简单地图的教程

今天主要讲的部分是绘制静态地图&#xff0c;使用的R语言绘图包是tmap&#xff0c;关于介绍就不多讲&#xff0c;下面开始代码的讲解&#xff0c;小白也可以放心食用。 1、绘制简单的单幅地图&#xff0c;这里以新西兰地区为例 #导入必要的包 library(tmap) library(sp) libr…...

【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 深度强化学习(Deep Reinforcement Learning)是一种结合深度学习和强化学习的技术,适用于解决复杂的决策问题。深度Q网络(DQN)和近端策略优化(PPO)是其中两种经典的算法,被广泛应用于游戏、机器人控…...

学习threejs,使用设置lightMap光照贴图创建阴影效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshLambertMaterial…...

类和对象(中)

文章目录 目录1. 类的6个默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 日期类实现 6. const成员函数7. 取地址及const取地址操作符重载 目录 类的6个默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载cons…...

编程之路,从0开始:预处理详解(完结篇)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;编程之路 这一篇预处理详解是我们C语言基础内容学习的最后一篇&#xff0c;也是我们的专栏&#xff…...

[chrome]黑色界面插件,PDF合并插件

Dark Reader_chrome插件下载,最新浏览器扩展,crx离线安装包 - 插件小屋 合并 PDF_chrome插件下载,最新浏览器扩展,crx离线安装包 - 插件小屋 下载的zip包解压成crx&#xff0c;然后把后缀名改为rar&#xff0c;然后解压&#xff0c;再导入解压的目录。...

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件&#xff1f;2. 什么是文件&#xff1f;3. 如何标识文件&#xff1f;4. 二进制文件和文本文件&#xff1f;5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…...

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…...

刷题日常(数据流中的中位数,逆波兰表达式求值,最长连续序列,字母异位词分组)

数据流中的中位数 描述 如何得到一个数据流中的中位数&#xff1f;如果从数据流中读出奇数个数值&#xff0c;那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值&#xff0c;那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()…...

Redis突然变慢,有哪些原因?

目录 一、存在bigkey 二、如果Redis 实例设置了内存上限 maxmemory&#xff0c;有可能导致 Redis 变慢 三、开启了内存大页 四、使用了Swap 五、网络带宽过载 六、频繁短连接 一、存在bigkey 如果Redis实例中存储了 bigkey&#xff0c;那么在淘汰删除 bigkey 释放内存时&…...

Qt入门1——认识Qt的几个常用头文件和常用函数

1.头文件 ① #include <QPushButton>——“按钮”头文件&#xff1b; ② #include <QLabel>——“标签”头文件&#xff1b; ③ #include <QFont>——“字体”头文件&#xff1b; ④#include <QDebug>——输出相关信息&#xff1b; 2. 常用函数/类的基…...

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…...

CSS笔记(一)炉石传说卡牌设计1

目标 我要通过html实现一张炉石传说的卡牌设计 问题 其中必须就要考虑到各个元素的摆放&#xff0c;形状的调整来达到满意的效果。通过这个联系来熟悉一下CSS的基本操作。 1️⃣ 基本概念 在CSS里面有行元素&#xff0c;块元素&#xff0c;内联元素&#xff0c;常见的行元…...

怎么在宿主机上通过ssh连接虚拟机 VirtualBox 中的linux系统

通过 Xshell 连接 VirtualBox 中的 linux 虚拟机&#xff0c;您需要确保以下几个步骤都正确配置&#xff1a; 1. 配置 VirtualBox 网络 您需要将 VirtualBox 虚拟机的网络适配器设置为支持 SSH 连接的模式&#xff1a; 打开 VirtualBox&#xff0c;选择您的 Ubuntu 虚拟机&am…...

Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图

用户打开 PDF 文档时&#xff0c;他们会看到 PDF 的初始视图。默认情况下&#xff0c;打开 PDF 时不会显示书签面板或缩略图面板。在本文中&#xff0c;我们将演示如何设置文档属性&#xff0c;以便每次启动文件时都会打开书签面板或缩略图面板。 Spire.PDF for .NET 是一款独…...

241125学习日志——[CSDIY] [InternStudio] 大模型训练营 [17]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

Centos 7 安装 Docker 最新版本

文章目录 一、卸载旧版本二、安装最新版本docker三、问题解决3.1 启动docker报错3.2 启动容器报错 一、卸载旧版本 #如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest …...

JavaScript的基础数据类型

一、JavaScript中的数组 定义 数组是一种特殊的对象&#xff0c;用于存储多个值。在JavaScript中&#xff0c;数组可以包含不同的数据类型&#xff0c;如数字、字符串、对象、甚至其他数组。数组的创建有两种常见方式&#xff1a; 字面量表示法&#xff1a;let fruits [apple…...

网络安全-------防止被抓包

1.Ios应用网络安全之https 安全套接字层 (Secure Socket Layer, SSL) 是用来实现互联网安全通信的最普遍的标准。Web 应用程序使用 HTTPS&#xff08;基于 SSL 的 HTTP&#xff09;&#xff0c;HTTPS 使用数字证书来确保在服务器和客户端之间进行安全、加密的通信。在 SSL 连接…...

【Linux】认识进程以及进程的状态

目录 认识进程 基本概念 查看进程 父子进程 进程的状态 进程排队 运行状态 阻塞状态 挂起状态 僵尸进程 孤儿进程 认识进程 基本概念 有些教材上会说&#xff1a;正在运行的程序就是进程。这并没有错误&#xff0c;但是太过于笼统。现在我们深入到Linux底层来了解…...

Parker派克防爆电机在实际应用中的安全性能如何保证?

Parker防爆电机确保在实际应用中的安全性能主要通过以下几个方面来保证&#xff1a; 1.防爆外壳设计&#xff1a;EX系列电机采用强大的防爆外壳&#xff0c;设计遵循严格的防爆标准&#xff0c;能够承受内部可能发生的爆炸而不破损&#xff0c;利用间隙切断原理&#xff0c;防…...

11超全局变量php

超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS&#xff1a;是PHP的一个超级全局变量组&#xff0c;在一个PHP脚本的全部作用域中都可以访问。 $_SERVER&#xff1a;$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...