【Elasticsearch 】 聚合分析:聚合概述

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

在这里插入图片描述


在这里插入图片描述

【Elasticsearch 】 聚合分析:聚合概述

引言

在当今数字化时代,数据如同浩瀚的海洋,蕴含着无尽的价值。然而,如何从海量的数据中提取出有意义的信息,成为了众多开发者和数据分析师面临的重要挑战。Elasticsearch 作为一款强大的分布式搜索引擎,不仅提供了高效的搜索功能,其聚合分析功能更是为我们在数据海洋中挖掘宝藏提供了有力的工具。

Elasticsearch 的聚合分析功能允许我们对存储在其中的数据进行深入的统计分析和分组计算。想象一下,你拥有一个包含数百万条用户行为记录的数据集,你可能想知道不同年龄段的用户购买了哪些产品,或者某个时间段内网站的平均访问时长是多少。这些看似复杂的问题,通过 Elasticsearch 的聚合功能都能轻松解决。

聚合分析就像是一个智能的数据洞察引擎,它能够将无序的数据转化为有价值的统计结果。通过对数据进行分组、计算各种度量值以及对聚合结果进行进一步处理,我们可以揭示数据背后隐藏的模式、趋势和关系。这不仅有助于我们做出更明智的决策,还能为业务的发展提供有力的支持。

在接下来的内容中,我们将探讨 Elasticsearch 聚合分析的各个方面,从基本概念实际应用,通过丰富的案例和详细的代码示例,带你全面掌握这一强大的功能。

一、Elasticsearch 聚合分析概述

(一)聚合的概念

聚合,简单来说,就是对数据进行统计分析、分组计算的操作。在 Elasticsearch 中,它提供了一种强大的方式来处理存储在索引中的大量文档。通过聚合,我们可以将数据按照特定的规则进行分组,并对每个分组的数据进行各种计算,例如求和、求平均值、计数等。这使得我们能够从宏观角度了解数据的分布和特征,提取出对业务有重要意义的信息。

(二)聚合的作用

  1. 数据洞察:帮助我们快速了解数据的整体情况,发现数据中的规律和趋势。例如,在电商数据中,通过聚合分析可以了解不同商品类别的销售情况,找出热门和冷门商品。
  2. 决策支持:为业务决策提供数据支持。通过对用户行为数据的聚合分析,可以了解用户的偏好和行为模式,从而优化产品设计和营销策略。
  3. 性能优化:在某些情况下,聚合分析可以帮助我们发现数据存储和查询中的性能瓶颈,从而进行针对性的优化。

二、聚合的分类

(一)桶聚合

  1. 概念
    桶聚合就像是一个个“桶”,它将数据按照特定的条件分组到不同的桶中。每个桶都代表了一个具有相同特征的数据子集。例如,我们可以按照商品类别将销售数据分组到不同的桶中,每个桶就是一个商品类别,桶中的文档就是该类别下的销售记录。
  2. 常见的桶聚合类型
    • Terms 聚合:这是最常用的桶聚合之一,它根据文档中某个字段的值进行分组。例如,在一个包含用户信息的索引中,我们可以使用 Terms 聚合按照用户的性别进行分组,统计男性和女性用户的数量。
    // 使用 Java API 进行 Terms 聚合
    TermsAggregationBuilder termsAggregation = AggregationBuilders.terms("gender_aggregation").field("gender");
    SearchRequest searchRequest = new SearchRequest("user_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(termsAggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Terms terms = searchResponse.getAggregations().get("gender_aggregation");
    for (Terms.Bucket bucket : terms.getBuckets()) {String gender = bucket.getKeyAsString();long docCount = bucket.getDocCount();System.out.println("Gender: " + gender + ", Doc Count: " + docCount);
    }
    
    • Date Histogram 聚合:用于按照日期对数据进行分组。在处理时间序列数据时非常有用,比如按天、按周统计网站的访问量。
    // 使用 Java API 进行 Date Histogram 聚合
    DateHistogramAggregationBuilder dateHistogramAggregation = AggregationBuilders.dateHistogram("date_histogram_aggregation").field("visit_date").calendarInterval(CalendarInterval.DAY);
    SearchRequest searchRequest = new SearchRequest("website_visits_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(dateHistogramAggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    DateHistogram dateHistogram = searchResponse.getAggregations().get("date_histogram_aggregation");
    for (DateHistogram.Bucket bucket : dateHistogram.getBuckets()) {String key = bucket.getKeyAsString();long docCount = bucket.getDocCount();System.out.println("Date: " + key + ", Doc Count: " + docCount);
    }
    

(二)度量聚合

  1. 概念
    度量聚合是对数据进行数值计算的聚合类型。它基于桶聚合的结果,对每个桶中的数据进行具体的数值计算,如求和、平均值、最大值、最小值等。例如,在按照商品类别分组后,我们可以使用度量聚合计算每个类别商品的平均价格、总销售额等。
  2. 常见的度量聚合类型
    • Avg 聚合:计算平均值。例如,计算所有产品的平均价格。
    // 使用 Java API 进行 Avg 聚合
    AvgAggregationBuilder avgAggregation = AggregationBuilders.avg("average_price_aggregation").field("price");
    SearchRequest searchRequest = new SearchRequest("products_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(avgAggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Avg avg = searchResponse.getAggregations().get("average_price_aggregation");
    double averagePrice = avg.getValue();
    System.out.println("Average Price: " + averagePrice);
    
    • Sum 聚合:计算总和。比如,计算某个时间段内的总销售额。
    // 使用 Java API 进行 Sum 聚合
    SumAggregationBuilder sumAggregation = AggregationBuilders.sum("total_sales_aggregation").field("sales_amount");
    SearchRequest searchRequest = new SearchRequest("sales_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(sumAggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Sum sum = searchResponse.getAggregations().get("total_sales_aggregation");
    double totalSales = sum.getValue();
    System.out.println("Total Sales: " + totalSales);
    

(三)管道聚合

  1. 概念
    管道聚合是对其他聚合的结果进行再聚合处理的聚合类型。它允许我们基于已有的聚合结果构建更复杂的分析逻辑。例如,我们可以对桶聚合的结果进行排序、计算百分比等操作。
  2. 常见的管道聚合类型
    • Percentiles 聚合:计算百分位数。在分析数据的分布情况时非常有用,比如了解用户响应时间的分布,找出 95% 响应时间的阈值。
    // 使用 Java API 进行 Percentiles 聚合
    PercentilesAggregationBuilder percentilesAggregation = AggregationBuilders.percentiles("response_time_percentiles_aggregation").field("response_time").percentiles(50, 75, 95);
    SearchRequest searchRequest = new SearchRequest("user_responses_index");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.aggregation(percentilesAggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Percentiles percentiles = searchResponse.getAggregations().get("response_time_percentiles_aggregation");
    Map<Double, Double> percentileValues = percentiles.getValuesAsMap();
    for (Map.Entry<Double, Double> entry : percentileValues.entrySet()) {System.out.println("Percentile: " + entry.getKey() + ", Value: " + entry.getValue());
    }
    

三、相关 Maven 依赖

在使用 Elasticsearch 的 Java API 进行聚合分析时,我们需要引入相关的 Maven 依赖。这些依赖将提供我们操作 Elasticsearch 所需的类和方法。

(一)Elasticsearch 客户端依赖

首先,我们需要引入 Elasticsearch 客户端依赖。这是与 Elasticsearch 集群进行通信的基础。

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

这个依赖提供了高级 REST 客户端,它基于 Elasticsearch 的 REST API 构建,提供了更方便、更面向对象的方式来与 Elasticsearch 进行交互。通过这个客户端,我们可以发送搜索请求、执行聚合操作等。

(二)Elasticsearch 核心依赖

还需要引入 Elasticsearch 的核心依赖,它包含了 Elasticsearch 的基本功能和数据结构。

<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.4</version>
</dependency>

这个依赖是 Elasticsearch 的核心库,它提供了索引管理、文档存储和检索等功能。在进行聚合分析时,我们依赖这个库来处理底层的数据操作。

(三)其他依赖

根据具体的需求,可能还需要引入其他依赖。例如,如果我们需要处理 JSON 数据,可能需要引入 Jackson 相关的依赖。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.4</version>
</dependency>

Jackson 库用于将 Java 对象转换为 JSON 格式,以及将 JSON 数据转换为 Java 对象。在与 Elasticsearch 进行数据交互时,JSON 是一种常用的数据格式,因此 Jackson 库非常有用。

四、原理深入剖析

(一)桶聚合原理

桶聚合的实现基于倒排索引的结构。当我们执行 Terms 聚合时,Elasticsearch 会遍历倒排索引,根据指定字段的值将文档分配到不同的桶中。每个桶对应一个唯一的值,桶中的文档都具有相同的该字段值。对于 Date Histogram 聚合,Elasticsearch 会根据日期字段的值,按照指定的时间间隔将文档分组到不同的桶中。这个过程涉及到日期的解析和范围匹配,通过高效的算法实现快速分组。

(二)度量聚合原理

度量聚合是在桶聚合的基础上进行的。一旦文档被分组到不同的桶中,度量聚合会对每个桶中的文档进行具体的数值计算。例如,Avg 聚合会计算桶中所有文档指定字段值的总和,然后除以文档数量得到平均值。Sum 聚合则直接计算字段值的总和。这些计算过程利用了 Elasticsearch 的分布式计算能力,在多个节点上并行处理数据,提高计算效率。

(三)管道聚合原理

管道聚合是对已有的聚合结果进行处理。它通过读取其他聚合的输出,应用特定的算法进行再聚合。例如,Percentiles 聚合会对已有的数值数据进行排序,然后根据指定的百分位数计算相应的值。这个过程需要对聚合结果进行有效的数据处理和分析,以确保得到准确的结果。

五、实际应用案例

(一)电商数据分析

在电商领域,我们可以使用 Elasticsearch 聚合分析来了解商品销售情况。例如,按照商品类别统计销售额和销售量。首先,我们使用 Terms 聚合按照商品类别进行分组,然后在每个桶中使用 Sum 聚合计算销售额和销售量。

// 按照商品类别统计销售额和销售量
TermsAggregationBuilder categoryTermsAggregation = AggregationBuilders.terms("category_aggregation").field("category");
SumAggregationBuilder salesSumAggregation = AggregationBuilders.sum("sales_amount_sum_aggregation").field("sales_amount");
SumAggregationBuilder quantitySumAggregation = AggregationBuilders.sum("quantity_sum_aggregation").field("quantity");
categoryTermsAggregation.subAggregation(salesSumAggregation);
categoryTermsAggregation.subAggregation(quantitySumAggregation);SearchRequest searchRequest = new SearchRequest("products_sales_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(categoryTermsAggregation);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);Terms categoryTerms = searchResponse.getAggregations().get("category_aggregation");
for (Terms.Bucket bucket : categoryTerms.getBuckets()) {String category = bucket.getKeyAsString();Sum salesSum = bucket.getAggregations().get("sales_amount_sum_aggregation");Sum quantitySum = bucket.getAggregations().get("quantity_sum_aggregation");double salesAmount = salesSum.getValue();long quantity = quantitySum.getValue();System.out.println("Category: " + category + ", Sales Amount: " + salesAmount + ", Quantity: " + quantity);
}

(二)日志分析

在日志分析场景中,我们可以使用 Elasticsearch 聚合分析来了解系统的运行情况。例如,按照时间统计不同类型日志的数量。我们使用 Date Histogram 聚合按照时间进行分组,然后在每个桶中使用 Terms 聚合按照日志类型进行进一步分组,最后使用 ValueCount 聚合统计每个日志类型的数量。

// 按照时间统计不同类型日志的数量
DateHistogramAggregationBuilder dateHistogramAggregation = AggregationBuilders.dateHistogram("date_histogram_aggregation").field("log_timestamp").calendarInterval(CalendarInterval.HOUR);TermsAggregationBuilder logTypeTermsAggregation = AggregationBuilders.terms("log_type_aggregation").field("log_type");
ValueCountAggregationBuilder logCountAggregation = AggregationBuilders.valueCount("log_count_aggregation").field("log_id");
logTypeTermsAggregation.subAggregation(logCountAggregation);
dateHistogramAggregation.subAggregation(logTypeTermsAggregation);SearchRequest searchRequest = new SearchRequest("system_logs_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(dateHistogramAggregation);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);DateHistogram dateHistogram = searchResponse.getAggregations().get("date_histogram_aggregation");
for (DateHistogram.Bucket timeBucket : dateHistogram.getBuckets()) {String time = timeBucket.getKeyAsString();Terms logTypeTerms = timeBucket.getAggregations().get("log_type_aggregation");for (Terms.Bucket logTypeBucket : logTypeTerms.getBuckets()) {String logType = logTypeBucket.getKeyAsString();ValueCount logCount = logTypeBucket.getAggregations().get("log_count_aggregation");long count = logCount.getValue();System.out.println("Time: " + time + ", Log Type: " + logType + ", Count: " + count);}
}

六、总结

Elasticsearch 的聚合分析功能为我们提供了强大的数据处理和洞察能力。通过桶聚合、度量聚合和管道聚合的组合使用,我们可以从海量数据中提取出丰富的有价值信息。在实际应用中,无论是电商数据分析、日志分析还是其他领域,聚合分析都能发挥重要作用。同时,合理选择和使用相关的 Maven 依赖,深入理解聚合的原理,能够帮助我们更高效地利用 Elasticsearch 进行数据处理和分析。希望本文的介绍和案例能够帮助读者更好地掌握 Elasticsearch 聚合分析,在实际项目中取得更好的成果。

参考资料文献

  1. Elasticsearch 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
  2. 《Elasticsearch in Action》,作者:Radu Gheorge
  3. Elasticsearch 官方博客:https://www.elastic.co/blog/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python matplotlib绘图,显示和保存没有标题栏和菜单栏的图像

目录 1. 使用plt.savefig保存无边框图形 2. 显示在屏幕上&#xff0c;并且去掉窗口的标题栏和工具栏 3. 通过配置 matplotlib 的 backend 和使用 Tkinter&#xff08;或其他图形库&#xff09; 方法 1&#xff1a;使用 TkAgg 后端&#xff0c;并禁用窗口的工具栏和标题栏 …

深入探索Python人脸识别技术:从原理到实践

一、引言在当今数字化时代,人脸识别技术已然成为了计算机视觉领域的璀璨明星,广泛且深入地融入到我们生活的各个角落。从门禁系统的安全守护,到金融支付的便捷认证,再到安防监控的敏锐洞察,它的身影无处不在,以其高效、精准的特性,极大地提升了我们生活的便利性与安全性…

国内汽车法规政策标准解读:GB 44495-2024《汽车整车信息安全技术要求》

目录 背景 概述 标准适用范围 汽车信息安全管理体系要求&#xff08;第5章&#xff09; 信息安全基本要求&#xff08;第6章&#xff09; 信息安全技术要求&#xff08;第7章&#xff09; ◆ 外部连接安全要求&#xff1a; ◆通信安全要求&#xff1a; ◆软件升级安全…

Arcgis Pro安装完成后启动失败的解决办法

场景 之前安装的Arcgis Pro 今天突然不能使用了&#xff0c;之前是可以使用的&#xff0c;自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro&#xff0c;页面也不弹出来&#xff0c;打开任务管理器可以看到进程创建之后&…

SAP POC 项目完工进度 - 收入确认方式【工程制造行业】【新准则下工程项目收入确认】

1. SAP POC收入确认基础概念 1.1 定义与原则 SAP POC&#xff08;Percentage of Completion&#xff09;收入确认方式是一种基于项目完工进度来确认收入的方法。其核心原则是根据项目实际完成的工作量或成本投入占预计总工作量或总成本的比例&#xff0c;来确定当期应确认的收…

mac 安装mongodb

本文分享2种mac本地安装mongodb的方法&#xff0c;一种是通过homebrew安装&#xff0c;一种是通过tar包安装 homebrew安装 brew tap mongodb/brew brew upate brew install mongodb-community8.0tar包安装 安装mongodb 1.下载mongodb社区版的tar包 mongdb tar包下载地址 2…

2023年江西省职业院校技能大赛网络系统管理赛项(Linux部分样题)

一、Linux项目任务描述 你作为一个Linux的技术工程师,被指派去构建一个公司的内部网络,要为员工提供便捷、安全稳定内外网络服务。你必须在规定的时间内完成要求的任务,并进行充分的测试,确保设备和应用正常运行。任务所有规划都基于Linux操作系统,请根据网络拓扑、基本配…

【威联通】FTP服务提示:服务器回应不可路由的地址。被动模式失败。

FTP服务器提示&#xff1a;服务器回应不可路由的地址。被动模式失败。 问题原因网络结构安全管理配置服务器配置网关![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1500d9c0801247ec8c89db7a44907e4f.png) 问题 FTP服务器提示&#xff1a;服务器回应不可路由的地址…

Java中json的一点理解

一、Java中json字符串与json对象 1、json本质 json是一种数据交换格式。 常说的json格式的字符串 > 发送和接收时都只是一个字符串&#xff0c;它遵循json这种格式。 2、前后端交互传输的json是什么&#xff1f; 前后端交互传输的json都是json字符串 比如&#xff1a;…

大模型GUI系列论文阅读 DAY2续:《一个具备规划、长上下文理解和程序合成能力的真实世界Web代理》

摘要 预训练的大语言模型&#xff08;LLMs&#xff09;近年来在自主网页自动化方面实现了更好的泛化能力和样本效率。然而&#xff0c;在真实世界的网站上&#xff0c;其性能仍然受到以下问题的影响&#xff1a;(1) 开放领域的复杂性&#xff0c;(2) 有限的上下文长度&#xff…

农业农村大数据应用场景|珈和科技“数字乡村一张图”解决方案

近年来&#xff0c;珈和科技持续深耕农业领域&#xff0c;聚焦时空数据服务智慧农业。 珈和利用遥感大数据、云计算、移动互联网、物联网、人工智能等先进技术&#xff0c;搭建“天空地一体化”监测体系&#xff0c;并创新建设了150的全球领先算法模型&#xff0c;广泛应用于高…

中间件漏洞之redis

目录 前置知识redis持久化存储动态修改配置打redis常用命令 利用弱口令未授权访问写ssh公钥直接写ssrf 绝对路径写shell直接写ssrf 反弹shell直接写ssrf 主从复制防御措施 前置知识 redis持久化存储 RDB Redis DataBase(默认) AOF Append Only File&#xff08;会追加日志文件…

【odbc】odbc连接kerberos认证的 hive和spark thriftserver

hive odbc驱动&#xff0c;以下两种都可以 教程&#xff1a;使用 ODBC 和 PowerShell 查询 Apache HiveHive ODBC Connector 2.8.0 for Cloudera Enterprise spark thriftserver本质就是披着hiveserver的外壳的spark server 完成kerberos认证: &#xff08;1&#xff09;可以…

ESP-Skainet语音唤醒技术,设备高效语音识别方案,个性化交互应用

在当今数字化、智能化飞速发展的时代&#xff0c;物联网&#xff08;IoT&#xff09;与人工智能&#xff08;AI&#xff09;的深度融合正在重塑我们的生活和工作方式。 在智能家居的生态系统中&#xff0c;语音唤醒技术不仅能够为用户提供个性化的服务&#xff0c;还能通过定制…

鸿蒙安装HAP时提示“code:9568344 error: install parse profile prop check error” 问题现象

在启动调试或运行应用/服务时&#xff0c;安装HAP出现错误&#xff0c;提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权&#xff0c;但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特权管控白名…

基于STM32的智能门锁安防系统(开源)

目录 项目演示 项目概述 硬件组成&#xff1a; 功能实现 1. 开锁模式 1.1 按键密码开锁 1.2 门禁卡开锁 1.3 指纹开锁 2. 功能备注 3. 硬件模块工作流程 3.1 步进电机控制 3.2 蜂鸣器提示 3.3 OLED显示 3.4 指纹与卡片管理 项目源代码分析 1. 主程序流程 (main…

html学习笔记(1)

一、什么是HTML HTML是HyperText Markup Language的缩写&#xff0c;即超文本标记语言&#xff0c;是一种用于创建网页的标准标记语言。以下是关于HTML的详细介绍&#xff1a; 基本概念 超文本&#xff1a;HTML中的“超文本”指的是网页中可以包含链接&#xff0c;这些链接…

JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码

1. 生鲜后台管理系统-注册功能 1.1. 注册功能 &#xff08;1&#xff09;创建注册RegisterServlet&#xff0c;接收form表单中的参数。   &#xff08;2&#xff09;service创建一个userService处理业务逻辑。   &#xff08;3&#xff09;RegisterServlet将参数传递给ser…

【cuda学习日记】3.1 CUDA执行模型--线程束分化

3.1.1 将同用的function放到header文件里 ./common/common.h #define CHECK(call) \{\const cudaError_t error call; \if (error ! cudaSuccess)\{\printf("Error: %s: %d\n", __FILE__, __LINE__);\printf("code :%d reason :%s\n", error , cudaGetEr…

【STM32-学习笔记-15-】MAX7219点阵屏模块

文章目录 MAX7219点阵模块一、MAX7219Ⅰ、 概述Ⅱ、功能特点Ⅲ、引脚功能Ⅳ、典型应用电路Ⅴ、内部组成结构Ⅵ、时序图Ⅶ、寄存器 二、STM32控制点阵屏Ⅰ、程序框图Ⅱ、程序编写①、MAX7219.c②、MAX7219.h③、MAX7219_Img.h④、main.c MAX7219点阵模块 一、MAX7219 Ⅰ、 概述…