十三、Hive 行列转换
作者:IvanCodes
日期:2025年5月19日
专栏:Hive教程
在Hive中,数据的形态转换是数据清洗、分析和报表制作中的核心环节。行列转换尤为关键,它能将数据从一种组织形式变为另一种,以适应不同的业务洞察需求。本笔记将深入探讨Hive中实现行转列和列转行的多种技巧,包括聚合函数、集合操作以及强大的UDTF。
一、行转列
行转列的目标是将某一列的不同值(类别)提升为结果集中的新列名,并将与之对应的数值或信息填充到这些新列中。
1. CASE WHEN
结合聚合函数 (最灵活、最通用)
这是实现行转列的基石方法,适应性强。
场景示例:
student_scores
表:
student_name | subject | score |
---|---|---|
Alice | Math | 90 |
Alice | English | 85 |
Bob | Math | 95 |
Bob | Physics | 88 |
期望输出:
student_name | Math_score | English_score | Physics_score |
---|---|---|---|
Alice | 90 | 85 | NULL |
Bob | 95 | NULL | 88 |
Hive SQL 实现:
SELECT
student_name,
MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS Math_score,
MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS English_score,
MAX(CASE WHEN subject = 'Physics' THEN score ELSE NULL END) AS Physics_score
FROM
student_scores
GROUP BY
student_name;
核心逻辑: 为每个要成为新列的subject
值创建一个 CASE WHEN
表达式,并配合聚合函数 (如 MAX
, SUM
, AVG
) 在 GROUP BY
子句定义的粒度上提取值。
2. COLLECT_LIST
/ COLLECT_SET
(聚合为数组/集合)
这两个函数本身不直接完成典型的行转列(即每个类别一个独立列),而是将属于同一分组的多行数据的某一列值聚合成一个数组 (COLLECT_LIST
保留重复,COLLECT_SET
去重) 或集合。这通常是一个中间步骤,后续可能需要UDF或其他处理来进一步转换。
场景示例:获取每个学生所有科目的成绩列表。
Hive SQL 实现:
SELECT
student_name,
COLLECT_LIST(score) AS all_scores_list, -- 所有成绩,可能重复
COLLECT_SET(subject) AS distinct_subjects_set -- 所有不重复的科目
FROM
student_scores
GROUP BY
student_name;
输出可能形式:
student_name | all_scores_list | distinct_subjects_set |
---|---|---|
Alice | [90, 85] | [“Math”, “English”] |
Bob | [95, 88] | [“Math”, “Physics”] |
进阶用法: 可以结合 CONCAT_WS
将数组元素连接成字符串,或者使用 MAP
数据类型和 STR_TO_MAP
来更灵活地组织数据,但这已偏离严格的“列名固定”的行转列。
二、列转行
列转行是将一行中的多个列值“铺开”成多行,每行通常包含一个标识列、一个原列名(或其代表的类别)和原列的值。
1. UNION ALL
(基础且通用)
对于固定且数量不多的列,UNION ALL
非常直观。
场景示例:
monthly_sales
表:
product_id | sales_jan | sales_feb | sales_mar |
---|---|---|---|
P001 | 100 | 120 | 110 |
期望输出:
product_id | month | sales |
---|---|---|
P001 | Jan | 100 |
P001 | Feb | 120 |
P001 | Mar | 110 |
Hive SQL 实现:
SELECT product_id, 'Jan' AS month, sales_jan AS sales FROM monthly_sales
UNION ALL
SELECT product_id, 'Feb' AS month, sales_feb AS sales FROM monthly_sales
UNION ALL
SELECT product_id, 'Mar' AS month, sales_mar AS sales FROM monthly_sales;
2. LATERAL VIEW EXPLODE
配合 MAP
或 ARRAY
(更灵活、可扩展)
当列多或需要动态处理时,此方法更为推荐。
Hive SQL 实现 (使用 MAP
):
SELECT
t1.product_id,
t2.month_name,
t2.sales_value
FROM
monthly_sales t1
LATERAL VIEW EXPLODE(MAP(
'Jan', sales_jan,
'Feb', sales_feb,
'Mar', sales_mar
)) t2 AS month_name, sales_value;
核心逻辑: 先将要转换的列构建成一个 MAP
(键为新类别,值为原列值),然后使用 EXPLODE
将其“炸开”成多行。LATERAL VIEW
使得我们能够在 SELECT
中引用 EXPLODE
生成的新列。
Hive SQL 实现 (使用 ARRAY
OF STRUCTS
):
SELECT
t1.product_id,
t2.month_struct.month_name AS month,
t2.month_struct.sales_value AS sales
FROM
monthly_sales t1
LATERAL VIEW EXPLODE(ARRAY(
STRUCT('Jan' AS month_name, sales_jan AS sales_value),
STRUCT('Feb' AS month_name, sales_feb AS sales_value),
STRUCT('Mar' AS month_name, sales_mar AS sales_value)
)) t2 AS month_struct;
说明: 使用 ARRAY
of STRUCTS
可以更好地组织每一对 (类别名, 值),特别是当“值”本身也是复合结构时。
3. Hive STACK
UDTF (简洁高效)
Hive 内置的 STACK
函数专门为列转行设计,语法简洁。
Hive SQL 实现:
SELECT
product_id,
month_data.month_name,
month_data.sales_value
FROM
monthly_sales
LATERAL VIEW STACK(3, -- 要生成的行数 (等于要转换的列的组数)
'Jan', sales_jan,
'Feb', sales_feb,
'Mar', sales_mar
) month_data AS month_name, sales_value;
STACK(N, c1_key, c1_val, c2_key, c2_val, ..., cN_key, cN_val)
: N
指定输出的行数,后面的参数成对提供新类别名和对应的列值。
4. CONCAT_WS
和 SPLIT
结合 LATERAL VIEW EXPLODE
(字符串拼接与拆分)
这种方法略显迂回,但有时在特定场景下或处理已拼接的字符串数据时有用。
场景: 先将多个列用特定分隔符拼接成一个字符串,然后拆分。
Hive SQL (概念性,不直接用于上述monthly_sales场景,因其不是最优):
假设要转换 col_A
, col_B
。
-- 步骤1: (可选) 如果数据已经是拼接好的字符串列,则跳过
-- SELECT id, CONCAT_WS(',', col_A, col_B) AS combined_string FROM some_table;-- 步骤2: 拆分 (假设combined_string列存在)
SELECT
id,
exploded_value
FROM
(SELECT id, CONCAT_WS(':', 'col_A_name', col_A_val, ',', 'col_B_name', col_B_val) AS combined_string_with_names FROM ...) -- 构造一个包含名称和值的字符串
LATERAL VIEW EXPLODE(SPLIT(combined_string_with_names, ',')) t1 AS single_pair_string
LATERAL VIEW EXPLODE(SPLIT(single_pair_string, ':')) t2 AS item; -- 这一步还需要更复杂的逻辑来分离name和value,通常不这么做
注意: 直接使用 CONCAT_WS
和 SPLIT
进行严格的列转行不如 MAP
/ARRAY
+EXPLODE
或 STACK
简洁和高效。CONCAT_WS
更常用于将多列数据或数组元素合并成一个展示性的字符串。
三、练习题
通用数据表:
employee_skills
表:
emp_name | dept | skill_primary | skill_secondary | years_exp_primary | years_exp_secondary |
---|---|---|---|---|---|
John | IT | Java | Python | 5 | 2 |
Jane | Sales | Communication | Negotiation | 7 | 4 |
Mike | IT | Python | SQL | 3 | 3 |
Sara | Marketing | SEO | Content Creation | 4 | NULL |
device_logs
表:
device_id | log_date | metric_type | metric_value |
---|---|---|---|
D01 | 2023-01-01 | CPU | 0.75 |
D01 | 2023-01-01 | Memory | 0.60 |
D01 | 2023-01-02 | CPU | 0.80 |
D02 | 2023-01-01 | CPU | 0.50 |
D02 | 2023-01-01 | DiskIO | 120.5 |
- 行转列 (CASE WHEN): 将
device_logs
表转换为每行显示 device_id 和 log_date,列为 CPU_Usage, Memory_Usage, DiskIO_Rate。 - 行转列 (COLLECT_LIST/CONCAT_WS): 从
employee_skills
表,为每个员工生成一列all_skills_string
,其中包含该员工的主要技能和次要技能,用逗号分隔 (例如: “Java,Python”)。如果次要技能为空,则只显示主要技能。 - 行转列 (更复杂的CASE WHEN): 基于
device_logs
表,统计每个 device_id 在每个 log_date 的 CPU 平均使用率和 Memory 最大使用率。输出列:device_id, log_date, Avg_CPU, Max_Memory。 - 列转行 (UNION ALL): 将
employee_skills
表中的 skill_primary 和 skill_secondary 以及它们对应的 years_exp_primary 和 years_exp_secondary 转换为长表。输出列:emp_name, dept, skill_type (‘Primary’ 或 ‘Secondary’), skill_name, years_experience。 - 列转行 (LATERAL VIEW EXPLODE MAP): 使用
LATERAL VIEW EXPLODE(MAP(...))
将employee_skills
表的 skill_primary 和 skill_secondary 列转换为长表。输出列:emp_name, skill_category (‘PrimarySkill’ 或 ‘SecondarySkill’), skill. - 列转行 (STACK): 使用
STACK
函数将employee_skills
表中的 years_exp_primary 和 years_exp_secondary 转换为长表。输出列:emp_name, experience_type (‘PrimaryExp’ 或 ‘SecondaryExp’), years. - 行转列 (动态类别处理思路 - 先聚合再处理): 从
device_logs
表中,统计每个device_id
下所有metric_type
的metric_value
的总和,结果存储在一个Map<String, Double>中。输出列:device_id, metrics_sum_map。 (提示:STR_TO_MAP
可能与COLLECT_LIST
ofCONCAT_WS
结合) - 列转行 (ARRAY of STRUCTS): 将
employee_skills
表的主要技能和次要技能及其经验年限,使用ARRAY
ofSTRUCTS
配合LATERAL VIEW EXPLODE
转换为长表。输出列:emp_name, dept, skill_info (STRUCT包含skill_name和years_exp)。 - 行转列 (带条件的字符串聚合): 从
device_logs
表,为每个 device_id 和 log_date,将所有 CPU 使用率大于0.7的metric_value
用逗号连接成一个字符串,列名为high_cpu_values
。 - 列转行 (综合应用): 假设
employee_skills
表有额外的project_A_role
和project_B_role
两列。使用最合适的方法将skill_primary
,skill_secondary
,project_A_role
,project_B_role
都转换为长表,包含 emp_name, category (‘Skill’ 或 ‘ProjectRole’), description (对应的值)。
四、练习题答案
答案1:
SELECT
device_id,
log_date,
MAX(CASE WHEN metric_type = 'CPU' THEN metric_value ELSE NULL END) AS CPU_Usage,
MAX(CASE WHEN metric_type = 'Memory' THEN metric_value ELSE NULL END) AS Memory_Usage,
MAX(CASE WHEN metric_type = 'DiskIO' THEN metric_value ELSE NULL END) AS DiskIO_Rate
FROM
device_logs
GROUP BY
device_id, log_date;
答案2:
SELECT
emp_name,
dept,
CONCAT_WS(',', skill_primary, IF(skill_secondary IS NOT NULL AND skill_secondary != '', skill_secondary, NULL)) AS all_skills_string -- 更严谨的IF处理空或空字符串
FROM
employee_skills;
-- 或者更简单的,如果次要技能为NULL,CONCAT_WS会自动忽略它(但空字符串不会)
-- SELECT emp_name, dept, CONCAT_WS(',', skill_primary, skill_secondary) AS all_skills_string FROM employee_skills;
答案3:
SELECT
device_id,
log_date,
AVG(CASE WHEN metric_type = 'CPU' THEN metric_value ELSE NULL END) AS Avg_CPU,
MAX(CASE WHEN metric_type = 'Memory' THEN metric_value ELSE NULL END) AS Max_Memory
FROM
device_logs
GROUP BY
device_id, log_date;
答案4:
SELECT emp_name, dept, 'Primary' AS skill_type, skill_primary AS skill_name, years_exp_primary AS years_experience FROM employee_skills
UNION ALL
SELECT emp_name, dept, 'Secondary' AS skill_type, skill_secondary AS skill_name, years_exp_secondary AS years_experience FROM employee_skills WHERE skill_secondary IS NOT NULL;
答案5:
SELECT
t1.emp_name,
t2.skill_category,
t2.skill
FROM
employee_skills t1
LATERAL VIEW EXPLODE(MAP(
'PrimarySkill', skill_primary,
'SecondarySkill', skill_secondary
)) t2 AS skill_category, skill
WHERE t2.skill IS NOT NULL;
答案6:
SELECT
emp_name,
exp_data.experience_type,
exp_data.years
FROM
employee_skills
LATERAL VIEW STACK(2,
'PrimaryExp', years_exp_primary,
'SecondaryExp', years_exp_secondary
) exp_data AS experience_type, years
WHERE exp_data.years IS NOT NULL;
答案7:
SELECT
device_id,
STR_TO_MAP(CONCAT_WS(',', COLLECT_LIST(CONCAT_WS(':', metric_type, CAST(SUM(metric_value) AS STRING))))) AS metrics_sum_map
FROM
device_logs
GROUP BY
device_id, metric_type -- 先按metric_type聚合得到SUM
GROUP BY device_id; -- 再按device_id聚合得到MAP
-- 上述写法比较复杂且可能不是最优,更常见的是直接聚合到MAP:
-- SELECT device_id, MAP_FROM_ENTRIES(COLLECT_LIST(STRUCT(metric_type, SUM(metric_value)))) AS metrics_sum_map
-- FROM device_logs GROUP BY device_id, metric_type GROUP BY device_id; -- Hive版本支持MAP_FROM_ENTRIES
-- 如果Hive版本不支持MAP_FROM_ENTRIES,通常聚合到数组,然后外部处理或UDF
更正和简化第7题思路 (直接用Hive内建功能构建Map,假设目标是每个metric_type对应其总和):
SELECT
device_id,
MAP_AGG(metric_type, sum_metric_value) AS metrics_sum_map
FROM (
SELECT device_id, metric_type, SUM(metric_value) as sum_metric_value
FROM device_logs
GROUP BY device_id, metric_type
) sub
GROUP BY device_id;
-- 注意: MAP_AGG 是 Hive 2.2.0+ 的功能. 如果版本较低,思路会更复杂,如上面注释的collect_list of structs.
答案8:
SELECT
t1.emp_name,
t1.dept,
t2.skill_info.skill_name AS skill_name,
t2.skill_info.years_exp AS years_experience
FROM
employee_skills t1
LATERAL VIEW EXPLODE(ARRAY(
STRUCT(skill_primary AS skill_name, years_exp_primary AS years_exp),
STRUCT(skill_secondary AS skill_name, years_exp_secondary AS years_exp)
)) t2 AS skill_info
WHERE t2.skill_info.skill_name IS NOT NULL;
答案9:
SELECT
device_id,
log_date,
CONCAT_WS(',', COLLECT_LIST(CASE WHEN metric_type = 'CPU' AND metric_value > 0.7 THEN CAST(metric_value AS STRING) ELSE NULL END)) AS high_cpu_values
FROM
device_logs
GROUP BY
device_id, log_date;
(如果想确保没有符合条件时不输出空字符串而是NULL,可以再包一层IF)
SELECT
device_id,
log_date,
IF(SIZE(COLLECT_LIST(CASE WHEN metric_type = 'CPU' AND metric_value > 0.7 THEN CAST(metric_value AS STRING) ELSE NULL END)) > 0,
CONCAT_WS(',', COLLECT_LIST(CASE WHEN metric_type = 'CPU' AND metric_value > 0.7 THEN CAST(metric_value AS STRING) ELSE NULL END)),
NULL) AS high_cpu_values
FROM
device_logs
GROUP BY
device_id, log_date;
答案10:
SELECT
emp_name,
items.category,
items.description
FROM
employee_skills
LATERAL VIEW STACK(4, -- 假设project_A_role 和 project_B_role 列存在
'Skill', skill_primary,
'Skill', skill_secondary,
'ProjectRole', project_A_role,
'ProjectRole', project_B_role
) items AS category, description
WHERE items.description IS NOT NULL;
相关文章:
十三、Hive 行列转换
作者:IvanCodes 日期:2025年5月19日 专栏:Hive教程 在Hive中,数据的形态转换是数据清洗、分析和报表制作中的核心环节。行列转换尤为关键,它能将数据从一种组织形式变为另一种,以适应不同的业务洞察需求。本…...
Django之验证码功能
验证码功能 目录 1.绘制验证码 2.在登录页面里面实现验证码的功能 3.代码展示集合 这篇文章, 内容不是很多, 不过验证码, 是在网页里面比较常见的功能, 所有我们还是要掌握它!!! 一、绘制验证码 绘制验证码, 我们需要用到图像, 然后在…...
代码随想录算法训练营 Day51 图论Ⅱ岛屿问题Ⅰ
图论 题目 99. 岛屿数量 使用 DFS 实现方法 判断岛屿方法 1. 遍历图,若遍历到了陆地 grid[i][j] 1 并且陆地没有被访问,在这个陆地的基础上进行 DFS 方法,或者是 BFS 方法 2. 对陆地进行 DFS 的时候时刻注意以访问的元素添加访问标记 //…...
Python Django 的 ORM 编程思想及使用步骤
目录 一、ORM 编程思想概述 二、Python 中使用 ORM 的主要优势 2.1 简化数据库操作 2.2 提高开发效率 2.3 减少错误 2.4 增强代码的可维护性 2.5 降低耦合性 三、Django 中使用 ORM 的详细步骤 3.1 创建应用模块 3.2 配置数据库信息 3.3 确定数…...
设计一个程序,将所有的小写字母转换为大写字母
汇编语言程序设计实验 实验内容 设计一个程序,将所有的小写字母转换为大写字母,此程序不能改变除字母a~z外的任何其它字符。 实验分析 实现的功能是将所有的小写字母转换为大写字母,此程序不能改变除字母a~z外的任何其它字符。可以分为以…...
Rust 学习笔记:关于错误处理的练习题
Rust 学习笔记:关于错误处理的练习题 Rust 学习笔记:关于错误处理的练习题想看到回溯,需要把哪个环境变量设置为 1?以下哪一项不是使用 panic 的好理由?以下哪一项最能描述为什么 File::open 返回的是 Result 而不是 O…...
使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
实验目的 掌握 Docker 容器化部署 MongoDB 副本集 的方法 理解 主从同步、故障转移、数据一致性 等核心机制 熟悉 MongoDB 集群管理命令 和 运维监控技巧 🔧 实验环境 操作系统: Rocky Linux 9 / CentOS 7 软件依赖: Docker 20.10 docker-compose 1.29 硬件要…...
信息化的编程未来发展
信息化与数字化与编程领域与AI的爆炸发展是最近十几年瞠目结舌的事情,列举一下相关词汇: C#、AI、C、Python、.NET、API 、IDE、asp、JavaScript网页端、Visua Studio、VR、Github、OpenGL-webGL-计算机图形学、面向对象 、类库、GIS、GPU计算与显卡、可…...
计算机视觉与深度学习 | EMD-KPCA-LSTM、EMD-LSTM、LSTM回归预测对比,多输入单输出(Matlab完整程序和数据)
以下是针对EMD-KPCA-LSTM、EMD-LSTM和LSTM回归预测对比的完整可运行MATLAB实现。包含数据生成、特征处理、模型构建和性能评估全流程,并提供关键代码注释和注意事项。 完整代码实现(含数据生成) %% 清理环境 clear; clc; close all; warning off;%% 生成模拟数据(正弦波+噪…...
Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
在显存资源有限的情况下,合理分配显存给不同服务需要结合硬件特性、软件配置和模型优化技术。以下是几种有效的方法: 1. 使用 Ollama 自身的资源限制参数 Ollama 提供了一些命令行参数来限制单个模型的资源使用: --ram:限制模型…...
2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、简易用户登录系统 ⭐️ # 用户登录系统 # 用户名、密码、黑名单 users [{name: 小红, password: 123, status:True},{name…...
APP小程序抓包和下游代理
本文仅作学习/技术记录和交流,请勿进行非法活动,否则后果自负! 本文将主要围绕对小程序、APP的抓包方法,同时介绍下游代理。 在本文中我们将用到 Burpsuite、Yakit 和 Proxifier来完成。 小程序&APP抓包 对于小程序或APP抓…...
UE 材质几个输出向量节点
PixelNormalWS...
【八股战神篇】Java多线程高频面试题(JUC)
目录 专栏简介 一 如何创建线程? 延伸 1. 创建 Java 线程的本质 二 说说线程的生命周期? 延伸 1.描述一下线程的生命周期图 2.线程的优先级对线程执行有何影响? 3.如何确保三个线程按照特定顺序执行? 三 并发和并行的区…...
【esp32 mqtt】 连接亚马逊-加密传输信息
文章目录 1 加密文件1.1 服务端证书1.2 客户端CA证书1.3 客户端私钥1.4 三者协同工作的流程 2 亚马逊创建物品3 esp32 程序编写3.1 证书文件读取3.2 MQTT配置3.2.1 配置结构体3.2.2 初始化客户端3.2.3 注册事件3.2.4 开启mqtt3.2.5 示例 3.3 事件回调函数3.2.1 示例 3.4 接收到…...
用于判断主子关系的方法的实现(orm是efcore)
HasParentChildRelationship 方法:主要用于判断给定实体集合中是否存在主子关系,通过检查实体的导航属性来实现。CheckForDependencies 方法:是一个辅助方法,负责具体的依赖关系检查,包括对已访问实体的跟踪࿰…...
《Effective Python》第三章 循环和迭代器——在遍历参数时保持防御性
引言 本文基于《Effective Python: 125 Specific Ways to Write Better Python, 3rd Edition》一书的 Chapter 3: Loops and Iterators 中的 Item 21: Be Defensive when Iterating over Arguments。该条目深入探讨了在 Python 中处理迭代器(iterator)和…...
【python基础知识】Day30 模块和库的导入
学习python 学习python基础语法 处理任务需要用到的库 一、导入官方库的三种手段 1 标准导入:导入整个库 # 方式1:导入整个模块 import math# 导入库后,输出测试 print("方式1:使用 import math") print(f"圆周率…...
leetcode hot100刷题日记——4.盛最多水的容器
解答: 我的思路: class Solution{public:int maxArea(vector<int>& height){//遍历,我暴力找一下,时间超限// int vol0;// for(int i0;i<height.size()-1;i){// for(int ji1;j<height.size();j){// volmax(vol,…...
大二周周练翻译
翻译题 文章目录 翻译题[toc]中国茶道数字经济茶马古道中国父母现状电子商务长城大学生就业一带一路中国结 相遇的意义,是被你改变的那部分的我,代替你永远陪在我身边 点个赞呗! 中国茶道 China is a country with a time-honored civilizat…...
深度学习————模型保存与部署
第一部分:模型保存基础 什么是模型保存? 当你训练好一个深度学习模型后,它会拥有“学习到的参数”,这些参数(权重、偏置等)构成了模型的“知识”。如果不保存这些参数,那么训练好的模型在关闭…...
5G金融互联:迈向未来金融服务的极速与智能新时代
5G金融互联:迈向未来金融服务的极速与智能新时代 大家好,我是Echo_Wish,今天咱们聊聊一个大家都十分关心的话题:5G网络在金融服务中的应用。咱们平时可能觉得5G只是打个电话、刷个视频更流畅了,但在金融服务领域,5G的低延时、大带宽和高可靠性正在悄然改变整个游戏规则。…...
交易所开发:构建功能完备的金融基础设施全流程指南
交易所开发:构建功能完备的金融基础设施全流程指南 ——从技术架构到合规安全的系统性解决方案 一、开发流程:从需求分析到运维优化 开发一款功能完备的交易所需要遵循全生命周期管理理念,涵盖市场定位、技术实现、安全防护和持续迭代四大阶…...
Icecream Video Editor:简单易用的视频编辑软件,轻松打造专业视频
Icecream Video Editor 是一款简单易用的视频编辑软件,专为希望快速、高效编辑视频的用户设计。它提供了丰富的功能,包括视频剪辑、效果应用、音频处理和视频导出,满足用户在不同场景下的需求。无论是视频新手还是有一定基础的创作者…...
论文阅读--Logical quantum processor based on reconfigurable atom arrays
论文主要内容 研究背景与目标: 论文提出了一种基于可重构中性原子阵列的逻辑量子处理器,旨在通过量子纠错(QEC)和逻辑量子比特编码,解决物理量子比特的噪声限制问题。该处理器结合高保真度逻辑门操作、任意连接性和实时…...
安防综合管理系统EasyCVR视频融合平台安防知识:门禁系统与视频监控系统如何联动?
在现代安防体系中,视频监控与门禁系统是两大核心。前者实时记录画面,为安全事件追溯提供依据;后者精准管控人员出入。二者联动可提升安防智能化水平,实现门禁点图像抓拍与实时监视,在安全事件发生时快速整合信息&#…...
微机系统第二章-题目整理
80x86标志寄存器中ZF位等于1,说明( )。 A A.运算结果等于0 B. 运算结果大于0 C. 运算结果不等于0 D.运算结果溢出 8086CPU由哪两大部分组成?简述它们的主要功能。 总线接口部件BIU跟执行部件EU。 总线接口部件(BIU&…...
w~自动驾驶合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12371169 #世界模型和DriveGPT这类大模型到底能给自动驾驶带来什么ne 以下分享大模型与自动驾驶结合的相关工作9篇论 1、ADAPT ADAPT: Action-aware Driving Caption Transformer(ICRA2023) AD…...
嵌入式学习的第二十三天-数据结构-树+哈希表+内核链表
一、树(一对多) 1.树的定义 树:n(n>0)个结点的有限集合。n 0 ,空树。 2.在任意一个非空树中, (1),有且仅有一个特定的根结点 (2),当n>1 时,其余结点可分为m个…...
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发 在当今技术领域,随着AI和大模型技术的广泛应用,如何在复杂的系统架构中高效地集成这些技术成为了各大互联网公司关注的重点。本文将通过一场模拟的面试对话,…...
Ansible模块——主机名设置和用户/用户组管理
设置主机名 ansible.builtin.hostname: name:要设置的主机名 use:更新主机名的方式(默认会自动选择,不指定的话,物理机一般不会有问题,容器可能会有问题,一般是让它默认选择) syst…...
lowcoder数据库操作1:链接目标数据库
比如我使用的是PostgreSQL,要链接到数据库。 步骤1,Data Sources 步骤2, New data source 步骤3,选择PostgreSQL 步骤4,输入各种信息 命名,数据库所在的IP,端口,库名,用户密码。 步…...
R9打卡——RNN实现阿尔茨海默病诊断(优化特征选择版)
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.检查GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn.functional as F import seaborn as sns#设置GPU训…...
Label Studio:开源标注神器
目录 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多类型数据全兼容 2.2 个性化定制随心配 2.3 团队协作超给力 2.4 机器学习巧集成 三、上手实操超简单 3.1 安装部署不头疼 3.1.1 Docker安装 3.1.2 pip安装 3.1.3 Anaconda安装 3.2 快速开启标注…...
flow-两种SharingStarted策略的区别示例
一 代码示例 viewModel.kt:// 上游数据源 - 模拟温度传感器 private val temperatureSource flow {var temp 20while(true) {emit(temp)delay(1000)println("上游发射温度: $temp") // 日志观察发射} }// WhileSubscribed - 有订阅者才收集 val temperature1 tem…...
零基础设计模式——设计模式入门
第一部分:设计模式入门 欢迎来到设计模式的世界!别担心,这听起来可能很“高大上”,但我们会用最生活化的例子来帮助你理解。 1. 什么是设计模式? 想象一下,你是个大厨,每天都要做很多菜。有些…...
通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
一、引言 在现代软件开发中,交叉编译是构建跨平台应用程序的关键技术。本文将详细介绍如何使用Docker容器和vcpkg包管理器为Arm64架构交叉编译gRPC库。这种方法特别适用于需要在x86开发机上为ARM服务器或嵌入式设备构建高性能RPC服务的场景。 二、配置Docker交叉编…...
Nginx基础知识
Nginx是什么? Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例: 1. 核心概念 • 配置文件位置:通常为 /etc/nginx/nginx.conf 或 /us…...
【计算机主板架构】ITX架构
一、引言 在计算机硬件的广阔领域中,主板架构犹如大厦的基石,对整个计算机系统的性能、功能和扩展性起着至关重要的作用。其中,ITX架构以其小巧、灵活和独特的设计理念,在特定的应用场景中脱颖而出。从家庭媒体中心到小型办公电脑…...
ubuntu 20.04 运行和编译LOAM_Velodyne
摘要:创建工作空间-->src下克隆代码(https://github.com/laboshinl/loam_velodyne)-->修改四处代码(找到src/loam_velodyne路径下的CMakeLists.txt文件,注释掉35行代码和将/LOAM/src/loam_velodyne/src/lib文件夹…...
云计算简介:从“水电”到“数字引擎”的技术革命
云计算简介:从“水电”到“数字引擎”的技术革命 在当今数字化浪潮中,云计算早已从一个技术概念演变为支撑现代社会运转的核心基础设施。无论是你手机里的天气预报、电商购物的推荐系统,还是企业内部的ERP系统,背后都离不开云计算…...
femap许可与多用户共享
随着电磁仿真技术的发展,Femap作为一款领先的工具,在多个领域中发挥着不可替代的作用。然而,对于许多团队和企业来说,如何高效、经济地管理和使用Femap许可证成为了一个亟待解决的问题。本文将探讨Femap许可与多用户共享的概念、优…...
spring中yml配置上下文与tomcat等外部容器不一致问题
结论:外部优先级大于内部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo这表示你的 Spring Boot 应用的上下文路径(context-path)是 /demo,即访问你的服务时,URL 必须以 /d…...
网络I/O学习-poll(三)
一、为什么要用Poll 由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化 二、poll机制 poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪…...
云原生攻防2(Docker基础补充)
Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…...
【C++模板与泛型编程】实例化
目录 一、模板实例化的基本概念 1.1 什么是模板实例化? 1.2 实例化的触发条件 1.3 实例化的类型 二、隐式实例化 2.1 隐式实例化的工作原理 2.2 类模板的隐式实例化 2.3 隐式实例化的局限性 三、显式实例化 3.1 显式实例化声明(extern templat…...
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系 一、背景 随着微服务架构、云原生技术的普及,传统的手动部署方式已难以满足现代业务快速迭代、高可用的需求。CI/CD(持续集成/持续交付)作为现代 DevOps 的核心环节&#…...
后退的风景
后退的风景 前言回退的景色 前言 坐在高铁的窗边,这是一趟回程的旅途,所有的树木、铁塔、石碑向后涌去,一如从前。 所谓风景正是如此,无非是看到了一段触动内心的感受,这段感受可能是伤心,亦或是欣喜。这…...
腾讯云安装halo博客
腾讯云安装halo博客 如果网站已经配置好可以直接使用的,可以直接跳转到《6》进行1panel的安装, 如果跳过之后安装出现问题,可以看看前面步骤 从《6》开始的安装视频 我估计是网站默认放开的端口和他返代理应用的端口冲突了,重装…...
Excel宏和VBA的详细分步指南
Excel宏和VBA的详细分步指南 一、宏录制与代码分析(超详细版)1. 启用开发工具2. 录制宏 二、VBA核心语法(深入详解)1. 变量与数据类型2. 循环结构3. 条件判断2. Worksheet对象3. Range对象的高级操作 四、实用案例扩展1. 数据清洗…...