Hive ---- 函数

news2024/11/24 14:09:33

Hive ---- 函数

  • 1. 函数简介
  • 2. 单行函数
    • 1. 算术运算函数
    • 2. 数值函数
    • 3. 字符串函数
    • 4. 日期函数
    • 5. 流程控制函数
    • 6. 集合函数
    • 7. 案例演示
  • 3. 高级聚合函数
    • 案例演示
  • 4. 炸裂函数
    • 1. 概述
    • 2. 案例演示
  • 5. 窗口函数
    • 1. 概述
    • 2. 常用窗口函数
    • 3. 案例演示
  • 6. 自定义函数
  • 7. 自定义UDF函数

1. 函数简介

Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。
好处:避免用户反复写逻辑,可以直接拿来使用。
重点:用户需要知道函数叫什么,能做什么。
Hive提供了大量的内置函数,按照其特点可大致分为如下几类:单行函数、聚合函数、炸裂函数、窗口函数。
以下命令可用于查询所有内置函数的相关信息。

1. 查看系统内置函数

hive> show functions;

在这里插入图片描述

2. 查看内置函数用法

hive> desc function upper;

在这里插入图片描述

3. 查看内置函数详细信息

hive> desc function extended upper;

在这里插入图片描述

2. 单行函数

单行函数的特点是一进一出,即输入一行,输出一行。
单行函数按照功能可分为如下几类: 日期函数、字符串函数、集合函数、数学函数、流程控制函数等。

1. 算术运算函数

在这里插入图片描述
案例实操:查询出所有员工的薪水后加1显示。

select sal + 1 from emp;

在这里插入图片描述

2. 数值函数

1. round:四舍五入

select round(3.3);

在这里插入图片描述
2. ceil:向上取整

select ceil(3.1);

在这里插入图片描述
3. floor:向下取整

select floor(4.8);

在这里插入图片描述

3. 字符串函数

1. substring:截取字符串
语法一:substring(string A, int start)
返回值:string
说明:返回字符串A从start位置到结尾的字符串
语法二:substring(string A, int start, int len)
返回值:string
说明:返回字符串A从start位置开始,长度为len的字符串
案例实操:
(1)获取第二个字符以后的所有字符

select substring("atguigu",2);

在这里插入图片描述

(2)获取倒数第三个字符以后的所有字符

select substring("atguigu",-3);

在这里插入图片描述
(3)从第3个字符开始,向后获取2个字符

select substring("atguigu",3,2);

在这里插入图片描述

2. replace :替换
语法:replace(string A, string B, string C)
返回值:string
说明:将字符串A中的子字符串B替换为C。

select replace('atguigu', 'a', 'A');

在这里插入图片描述

3. regexp_replace:正则替换
语法:regexp_replace(string A, string B, string C)
返回值:string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符。

案例实操:

select regexp_replace('100-200', '(\\d+)', 'num');

在这里插入图片描述

4. regexp:正则匹配
语法:字符串 regexp 正则表达式
返回值:boolean
说明:若字符串符合正则表达式,则返回true,否则返回false。

(1)正则匹配成功,输出true

select 'dfsaaaa' regexp 'dfsa+';

在这里插入图片描述
(2)正则匹配失败,输出false

select 'dfsaaaa' regexp 'dfsb+';

在这里插入图片描述
5. repeat:重复字符串
语法:repeat(string A, int n)
返回值:string
说明:将字符串A重复n遍。

select repeat('123', 3);

在这里插入图片描述
6. split :字符串切割
语法:split(string str, string pat)
返回值:array
说明:按照正则表达式pat匹配到的内容分割str,分割后的字符串,以数组的形式返回。

select split('a-b-c-d','-');

在这里插入图片描述
7. nvl :替换null值
语法:nvl(A,B)
说明:若A的值不为null,则返回A,否则返回B。

select nvl(null,1); 

在这里插入图片描述
8. concat :拼接字符串
语法:concat(string A, string B, string C, ……)
返回:string
说明:将A,B,C……等字符拼接为一个字符串

select concat('beijing','-','shanghai','-','shenzhen');

在这里插入图片描述
9. concat_ws:以指定分隔符拼接字符串或者字符串数组
语法:concat_ws(string A, string…| array(string))
返回值:string
说明:使用分隔符A拼接多个字符串,或者一个数组的所有元素。

select concat_ws('-','beijing','shanghai','shenzhen');

在这里插入图片描述

select concat_ws('-',array('beijing','shenzhen','shanghai'));

在这里插入图片描述
10. get_json_object:解析json字符串
语法:get_json_object(string json_string, string path)
返回值:string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。

案例实操:
(1)获取json数组里面的json具体数据

select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0].name');

在这里插入图片描述
(2)获取json数组里面的数据

select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0]');

在这里插入图片描述

4. 日期函数

1. unix_timestamp:返回当前或指定时间的时间戳
语法:unix_timestamp()
返回值:bigint

案例实操:

select unix_timestamp('2022/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');  

在这里插入图片描述
说明:-前面是日期,后面是指日期传进来的具体格式

2. from_unixtime:转化UNIX时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式
语法:from_unixtime(bigint unixtime[, string format])
返回值:string

案例实操:

select from_unixtime(1659946088);

在这里插入图片描述
**3. current_date:当前日期 **

select current_date;

在这里插入图片描述
**4. current_timestamp:当前的日期加时间,并且精确的毫秒 **

select current_timestamp;

在这里插入图片描述

5. month:获取日期中的月
语法:month (string date)
返回值:int

案例实操:

select month('2022-08-08 08:08:08');

在这里插入图片描述
6. day:获取日期中的日
语法:day (string date)
返回值:int

案例实操:

select day('2022-08-08 08:08:08');

在这里插入图片描述
7. hour:获取日期中的小时
语法:hour (string date)
返回值:int

案例实操:

select hour('2022-08-08 08:08:08');

在这里插入图片描述
8. datediff:两个日期相差的天数(结束日期减去开始日期的天数)
语法:datediff(string enddate, string startdate)
返回值:int

案例实操:

select datediff('2021-08-08','2022-10-09');

在这里插入图片描述

第一个日期减去第二个日期

9. date_add:日期加天数
语法:date_add(string startdate, int days)
返回值:string
说明:返回开始日期 startdate 增加 days 天后的日期

案例实操:

select date_add('2022-08-08',2);

在这里插入图片描述
10. date_sub:日期减天数
语法:date_sub (string startdate, int days)
返回值:string
说明:返回开始日期startdate减少days天后的日期。

案例实操:

select date_sub('2022-08-08',2);

在这里插入图片描述
11. date_format:将标准日期解析成指定格式字符串

select date_format('2022-08-08','yyyy年-MM月-dd日')

在这里插入图片描述

5. 流程控制函数

1. case when:条件判断函数
语法一:case when a then b [when c then d]* [else e] end
返回值:T
说明:如果a为true,则返回b;如果c为true,则返回d;否则返回 e

select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end;

在这里插入图片描述
语法二: case a when b then c [when d then e]* [else f] end
返回值: T
说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f

select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end;

在这里插入图片描述

2. if: 条件判断,类似于Java中三元运算符
语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值:T
说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull

(1)条件满足,输出正确

select if(10 > 5,'正确','错误');

在这里插入图片描述
(2)条件不满足,输出错误

select if(10 < 5,'正确','错误');

在这里插入图片描述

6. 集合函数

1. size:集合中元素的个数

select size(friends) from test;  --2/2  每一行数据中的friends集合里的个数

2. map:创建map集合
语法:map (key1, value1, key2, value2, …)
说明:根据输入的key和value对构建map类型
案例实操:

select map('xiaohai',1,'dahai',2);

在这里插入图片描述

3. map_keys: 返回map中的key

select map_keys(map('xiaohai',1,'dahai',2));

在这里插入图片描述
4. map_values: 返回map中的value

select map_values(map('xiaohai',1,'dahai',2));

在这里插入图片描述
5. array 声明array集合
语法:array(val1, val2, …)
说明:根据输入的参数构建数组array类

select array('1','2','3','4');

在这里插入图片描述
6. array_contains: 判断array中是否包含某个元素

select array_contains(array('a','b','c','d'),'a');

在这里插入图片描述
7. sort_array:将array中的元素排序

select sort_array(array('a','d','c'));

在这里插入图片描述
8. struct声明struct中的各属性
语法:struct(val1, val2, val3, …)
说明:根据输入的参数构建结构体struct类

select struct('name','age','weight');

在这里插入图片描述
9. named_struct声明struct的属性和值

select named_struct('name','xiaosong','age',18,'weight',80);

在这里插入图片描述

7. 案例演示

1. 数据准备
1)表结构
在这里插入图片描述

2)建表语句

create  table  employee(
    name string,  --姓名
    sex  string,  --性别
    birthday string, --出生年月
    hiredate string, --入职日期
    job string,   --岗位
    salary double, --薪资
    bonus double,  --奖金
    friends array<string>, --朋友
    children map<string,int> --孩子
);

3)插入数据

insert into employee
  values('张无忌','男','1980/02/12','2022/08/09','销售',3000,12000,array('阿朱','小昭'),map('张小无',8,'张小忌',9)),
        ('赵敏','女','1982/05/18','2022/09/10','行政',9000,2000,array('阿三','阿四'),map('赵小敏',8)),
        ('宋青书','男','1981/03/15','2022/04/09','研发',18000,1000,array('王五','赵六'),map('宋小青',7,'宋小书',5)),
        ('周芷若','女','1981/03/17','2022/04/10','研发',18000,1000,array('王五','赵六'),map('宋小青',7,'宋小书',5)),
        ('郭靖','男','1985/03/11','2022/07/19','销售',2000,13000,array('南帝','北丐'),map('郭芙',5,'郭襄',4)),
        ('黄蓉','女','1982/12/13','2022/06/11','行政',12000,null,array('东邪','西毒'),map('郭芙',5,'郭襄',4)),
        ('杨过','男','1988/01/30','2022/08/13','前台',5000,null,array('郭靖','黄蓉'),map('杨小过',2)),
        ('小龙女','女','1985/02/12','2022/09/24','前台',6000,null,array('张三','李四'),map('杨小过',2));

在这里插入图片描述
2. 需求
1)统计每个月的入职人数
(1)期望结果
在这里插入图片描述
(2)需求实现

select
  month(replace(hiredate,'/','-')) as month,
  count(*) as cn
from
  employee
group by
  month(replace(hiredate,'/','-'))

在这里插入图片描述
2)查询每个人的年龄(年 + 月)
(1)期望结果
在这里插入图片描述
(2)需求实现

-- 转换日期
select
  name,
  replace(birthday,'/','-') birthday
from
  employee  t1;

-- 求出年和月
select
  name,
  year(current_date())-year(t1.birthday) year,
  month(current_date())-month(t1.birthday) month
from
  (
    select
      name,
      replace(birthday,'/','-') birthday
    from
      employee
)t1;

-- 根据月份正负决定年龄
select
  name,
  concat(if(month>=0,year,year-1),'年',if(month>=0,month,12+month),'月') age
from
  (
    select
      name,
      year(current_date())-year(t1.birthday) year,
      month(current_date())-month(t1.birthday) month
    from
      (
        select
          name,
          replace(birthday,'/','-') birthday
        from
          employee
    )t1
)t2;

在这里插入图片描述
3)按照薪资,奖金的和进行倒序排序,如果奖金为null,置位0
(1)期望结果
在这里插入图片描述
(2)需求实现

select
  name,
  salary + nvl(bonus,0) sal
from
  employee
order by
   sal desc

在这里插入图片描述

4)查询每个人有多少个朋友
(1)期望结果
在这里插入图片描述
(2)需求实现

select
name,
size(friends) cnt
from
employee;

在这里插入图片描述
5)查询每个人的孩子的姓名
(1)期望结果
在这里插入图片描述
(2)需求实现

select
name,
map_keys(children) ch_name
from
employee;

在这里插入图片描述
6)查询每个岗位男女各多少人
(1)期望结果
在这里插入图片描述
(2)需求实现

select
  job,
  sum(if(sex='男',1,0)) male,
  sum(if(sex='女',1,0)) female
from
  employee
group by
  job;

在这里插入图片描述

3. 高级聚合函数

多进一出 (多行传入,一个行输出)。

1. 普通聚合 count/sum…
2. collect_list 收集并形成list集合,结果不去重

select
  sex,
  collect_list(job)
from
  employee
group by
  sex;

在这里插入图片描述

3. collect_set 收集并形成set集合,结果去重

select
  sex,
  collect_set(job)
from
  employee
group by
  sex;

在这里插入图片描述

案例演示

每个月的入职人数以及姓名

select
  month(replace(hiredate,'/','-')) as month,
  count(*) as cn,
  Collect_list(name) as name_list
from
  employee
group by
  month(replace(hiredate,'/','-'));

在这里插入图片描述

4. 炸裂函数

1. 概述

在这里插入图片描述

2. 案例演示

1. 数据准备

1)表结构

在这里插入图片描述

2)建表语句

create table movie_info(
    movie string,     --电影名称
    category string   --电影分类
) 
row format delimited fields terminated by "\t";

3)装载语句

insert overwrite table movie_info
values ("《疑犯追踪》", "悬疑,动作,科幻,剧情"),
       ("《Lie to me》", "悬疑,警匪,动作,心理,剧情"),
       ("《战狼2》", "战争,动作,灾难");

2. 需求

1)需求说明

根据上述电影信息表,统计各分类的电影数量,期望结果如下:

在这里插入图片描述

2)答案

在这里插入图片描述

5. 窗口函数

1. 概述

在这里插入图片描述

2. 常用窗口函数

按照功能,常用窗口可划分为如下几类:聚合函数、跨行取值函数、排名函数。

1. 聚合函数

max:最大值。

min:最小值。

sum:求和。

avg:平均值。

count:计数。

2. 跨行取值函数

(1)lead和lag

在这里插入图片描述

注:lag和lead函数不支持自定义窗口。

(2)first_value和last_value

在这里插入图片描述

3. 排名函数

在这里插入图片描述

注:rank 、dense_rank、row_number不支持自定义窗口。

3. 案例演示

1. 案例演示

1)表结构

在这里插入图片描述

2)建表语句

create table order_info
(
    order_id     string, --订单id
    user_id      string, -- 用户id
    user_name    string, -- 用户姓名
    order_date   string, -- 下单日期
    order_amount int     -- 订单金额
);

3)装载语句

insert overwrite table order_info
values ('1', '1001', '小元', '2022-01-01', '10'),
       ('2', '1002', '小海', '2022-01-02', '15'),
       ('3', '1001', '小元', '2022-02-03', '23'),
       ('4', '1002', '小海', '2022-01-04', '29'),
       ('5', '1001', '小元', '2022-01-05', '46'),
       ('6', '1001', '小元', '2022-04-06', '42'),
       ('7', '1002', '小海', '2022-01-07', '50'),
       ('8', '1001', '小元', '2022-01-08', '50'),
       ('9', '1003', '小辉', '2022-04-08', '62'),
       ('10', '1003', '小辉', '2022-04-09', '62'),
       ('11', '1004', '小猛', '2022-05-10', '12'),
       ('12', '1003', '小辉', '2022-04-11', '75'),
       ('13', '1004', '小猛', '2022-06-12', '80'),
       ('14', '1003', '小辉', '2022-04-13', '94');

2. 需求

1)统计每个用户截至每次下单的累积下单总额

(1)期望结果

在这里插入图片描述

(2)需求实现

select
    order_id,
    user_id,
    user_name,
    order_date,
    order_amount,
    sum(order_amount) over(partition by user_id order by order_date rows between unbounded preceding and current row) sum_so_far
from order_info;

在这里插入图片描述

2)统计每个用户截至每次下单的当月累积下单总额

(1)期望结果

在这里插入图片描述

(2)需求实现

select
    order_id,
    user_id,
    user_name,
    order_date,
    order_amount,
    sum(order_amount) over(partition by user_id,substring(order_date,1,7) order by order_date rows between unbounded preceding and current row) sum_so_far
from order_info;

在这里插入图片描述

3)统计每个用户每次下单距离上次下单相隔的天数(首次下单按0天算)

(1)期望结果

在这里插入图片描述

(2)需求实现

select
    order_id,
    user_id,
    user_name,
    order_date,
    order_amount,
    nvl(datediff(order_date,last_order_date),0) diff
from
(
    select
        order_id,
        user_id,
        user_name,
        order_date,
        order_amount,
        lag(order_date,1,null) over(partition by user_id order by order_date) last_order_date
    from order_info
)t1;

在这里插入图片描述

4)查询所有下单记录以及每个用户的每个下单记录所在月份的首/末次下单日期

(1)期望结果

在这里插入图片描述

(2)需求实现

select
    order_id,
    user_id,
    user_name,
    order_date,
    order_amount,
    first_value(order_date) over(partition by user_id,substring(order_date,1,7) order by order_date) first_date,
    last_value(order_date) over(partition by user_id,substring(order_date,1,7) order by order_date rows between unbounded preceding and unbounded following) last_date
from order_info;

在这里插入图片描述

5)为每个用户的所有下单记录按照订单金额进行排名

(1)期望结果

在这里插入图片描述

(2)需求实现

select
    order_id,
    user_id,
    user_name,
    order_date,
    order_amount,
    rank() over(partition by user_id order by order_amount desc) rk,
    dense_rank() over(partition by user_id order by order_amount desc) drk,
    row_number() over(partition by user_id order by order_amount desc) rn
from order_info;

在这里插入图片描述

6. 自定义函数

1)Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。

2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

3)根据用户自定义函数类别分为以下三种:

  1. UDF(User-Defined-Function)
    一进一出。

  2. UDAF(User-Defined Aggregation Function)
    用户自定义聚合函数,多进一出。
    类似于:count/max/min

  3. UDTF(User-Defined Table-Generating Functions)
    用户自定义表生成函数,一进多出。
    如lateral view explode()

4)官方文档地址

https://cwiki.apache.org/confluence/display/Hive/HivePlugins

5)编程步骤

  1. 继承Hive提供的类
    org.apache.hadoop.hive.ql.udf.generic.GenericUDF
    org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;

  2. 实现类中的抽象方法

  3. 在hive的命令行窗口创建函数

添加jar。

add jar linux_jar_path

创建function。

create [temporary] function [dbname.]function_name AS class_name;
  1. 在hive的命令行窗口删除函数
drop [temporary] function [if exists] [dbname.]function_name;

7. 自定义UDF函数

0)需求

自定义一个UDF实现计算给定基本数据类型的长度,例如:

hive(default)> select my_len("abcd");
4

1)创建一个Maven工程Hive

在这里插入图片描述

2)导入依赖

<dependencies>
	<dependency>
		<groupId>org.apache.hive</groupId>
		<artifactId>hive-exec</artifactId>
		<version>3.1.3</version>
	</dependency>
</dependencies>

3)创建一个类

在这里插入图片描述

package org.example.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;

/**
 * @author dell
 * @date 2023/5/8 9:40
 */
public class MyUDF extends GenericUDF {

    /**
     * 判断传进来的参数的类型和长度,约定返回的数据类型
     * @param objectInspectors
     * @return
     * @throws UDFArgumentException
     */
    @Override
    public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
        if (objectInspectors.length != 1) {
            throw new UDFArgumentLengthException("please give me only one arg");
        }

        if (!objectInspectors[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)) {
            throw new UDFArgumentTypeException(1, "i need primitive type arg");
        }
        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
    }

    /**
     * 解决的具体逻辑
     * @param deferredObjects
     * @return
     * @throws HiveException
     */
    @Override
    public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
        Object o = deferredObjects[0].get();
        if (o == null) {
            return 0;
        }
        return o.toString().length();
    }

    /**
     * 用于获取解释的字符串
     * @param strings
     * @return
     */
    @Override
    public String getDisplayString(String[] strings) {
        return "";
    }
}

4)创建临时函数

(1)打成jar包上传到服务器/opt/module/hive/datas/myudf.jar

(2)将jar包添加到hive的classpath,临时生效

hive (default)> add jar /opt/module/hive/datas/myudf.jar;

(3)创建临时函数与开发好的java class关联

hive (default)> 
create temporary function my_len 
as "com.atguigu.hive.udf.MyUDF";

(4)即可在hql中使用自定义的临时函数

hive (default)> 
select 
    ename,
    my_len(ename) ename_len 
from emp;

(5)删除临时函数

hive (default)> drop temporary function my_len;

注意:临时函数只跟会话有关系,跟库没有关系。只要创建临时函数的会话不断,在当前会话下,任意一个库都可以使用,其他会话全都不能使用。

5)创建永久函数

(1)创建永久函数

注意:因为add jar本身也是临时生效,所以在创建永久函数的时候,需要制定路径(并且因为元数据的原因,这个路径还得是HDFS上的路径)。

hive (default)> 
create function my_len2 
as "com.atguigu.hive.udf.MyUDF" 
using jar "hdfs://hadoop102:8020/udf/myudf.jar";

(2)即可在hql中使用自定义的永久函数

hive (default)> 
select 
    ename,
    my_len2(ename) ename_len 
from emp;

(3)删除永久函数

hive (default)> drop function my_len2;

注意:永久函数跟会话没有关系,创建函数的会话断了以后,其他会话也可以使用。
永久函数创建的时候,在函数名之前需要自己加上库名,如果不指定库名的话,会默认把当前库的库名给加上。

永久函数使用的时候,需要在指定的库里面操作,或者在其他库里面使用的话加上,库名.函数名。

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

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

相关文章

Unity - 记一次非正规变体优化带来的兼容性导致部分手机卡死的问题

文章目录 问题但是我咨询过 公司中台TA大佬 - 2023.4.6然后咨询 unity 技术官方 - 2023.4.6再次遇到卡死 - 2023.5.24 解决方法具体华为真机上的 DEBUG 问题 在 2023.4.6 我们的 角色展示界面 就遇到了 华为手机&#xff0c;red mi note 11 的测试手机上的 后 2023.5.24 再次遇…

SSM框架学习之spring

Spring 以下是关于Spring Boot学习的一些文档和资源&#xff0c;希望对你有帮助&#xff1a; Spring Boot官方文档&#xff1a;https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ Spring Boot中文文档&#xff1a;https://www.springcloud.cc/spring-bo…

Server - 高性能的 PyTorch 训练环境配置 (PyTorch3D 和 FairScale)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130863537 PyTorch3D 是基于 PyTorch 的 3D 数据深度学习库&#xff0c;提供了高效、模块化和可微分的组件&#xff0c;以简化 3D 深度学…

龙讯旷腾作为首批单位入驻北京昇腾人工智能计算中心

2023中关村论坛系列活动—北京人工智能产业创新发展大会圆满落幕&#xff0c;围绕北京AI产业发展&#xff0c;政产学研用各界大咖汇聚京城&#xff0c;中国科协副主席束为、北京市副市长于英杰、中国工程院院士廖湘科出席大会。会上&#xff0c;北京市门头沟区政府联合中关村发…

Kubernetes基础操作

K8S基础操作 ✨✨✨✨✨✨✨✨✨这个基础操作一切都基于各位把k8s搭建好哦&#xff0c;搭建的时候请一定一定一定&#xff08;很重要&#xff09;&#xff0c;选定一个版本&#xff0c;能避免很多错&#xff0c;然后本章节就给大家介绍了k8s最基础的操作&#xff0c;有一些复杂…

基于GPTP时间同步(时钟同步服务器)技术助力智能驾驶应用

基于GPTP时间同步&#xff08;时钟同步服务器&#xff09;技术助力智能驾驶应用 基于GPTP时间同步&#xff08;时钟同步服务器&#xff09;技术助力智能驾驶应用 智能驾驶区域网关架构并未采用车载以太网总线进行连接&#xff0c;而是采用传统的 CAN 总线、FlexRay 或 MOST 总线…

解决若依出现Error: Cannot find module ‘@/views/xxx‘问题

问题描述&#xff1a; 若依 vue 版菜单点不开&#xff0c;报错&#xff1a;Error: Cannot find module ‘/views/xxx’ 。后台、vue前端启动都没问题。但是左侧菜单点不开&#xff0c;一直在加载中。 原因&#xff1a; 路由懒加载&#xff0c;webpack版本问题&#xff0c;we…

常见淘宝API文档接口使用攻略,一文搞定

探索淘宝数据的奥秘&#xff0c;淘宝是目前国内最大的B2C电商平台之一&#xff0c;每天都会产生海量的数据。借助淘宝API技术文档&#xff0c;我们可以轻松地获取到这些数据&#xff0c;从而为电商运营和数据分析提供有力支持。 1.什么是淘宝API&#xff1f; 淘宝API&#xf…

工作分配问题——算法设计与分析(C实现)

目录 一、问题描述 二、问题分析 三、代码展示 四、结果验证 一、问题描述 问题描述&#xff1a;设有n件工作分配给n个人。将工作i分配给第j个人所需要的费用为Cij。试设计一个算法&#xff0c;为每个人都分配1件不同的工作&#xff0c;并使总费用达到最小值 算法设计&a…

nodejs+vue+elementui大学生多媒体学习系统

前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE(1)课程学习(包括课程分类 课程目录 课程学习等相关操作&#xff09; (2)课程评价 (3)课程统计 (4)相关信息管理(包括基本信息 课程编辑 注册登录等相关操作) 1、 node_modules文件夹(有np…

day18 - 使用直方图提高图像对比度

本期将使用图像直方图的相关知识来提高图像对比度&#xff0c;对图像进行优化&#xff0c;从而提高图像清晰度。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像直方图的定义和计算方法了解直方图均衡化的原理学会使用直方图均衡化优化图像 若要运行案例代码&#xf…

SpringBoot 结合 mybatis-plus 实现分页功能

一、分页的原理 要实现分页功能方法有很多&#xff0c;但最基本的实现原理都差不多&#xff0c;所以在实现功能之前要先把原理搞明白。正如删除有 “逻辑删除” 和 “物理删除" 之分&#xff0c;分页也有 “逻辑分页” 和 “物理分页”&#xff1b; 1、逻辑分页&…

WalMiner插件之xlog解析恢复使用教程

WalMiner插件主要有两个功能&#xff0c;在此记录一下第二个功能数据页挽回&#xff08;坏块修复&#xff09;&#xff0c;学习一下关于这块的使用方法&#xff0c;方便日后回顾。 1 环境搭建 创建WalMiner的extension create extension walminer;语句解析: 该句SQL功能是安…

Linux用户管理相关命令(全)

1、Linux用户(账号)管理 查询用户(账号)信息&#xff08;判断用户(账号)是否存在&#xff09; id account新增用户(账号) useradd account设置用户(账号)密码 方式1&#xff1a; passwd account 方式2&#xff1a; echo 123|passwd --stdin account; #密码为123删除用户(账…

CMS 8bit单片机C语言编写指南

0 Preface/Foreword 单片机包含两部分&#xff1a;程序内存&#xff08;Program memory space&#xff09;和数据存储器(Ram memory space)。 CMS单片机堆栈深度受限&#xff0c;随具体的芯片而固定。 1 CMS C程序框架及数据类型 1.1 源程序基本框架 Example: 1.2 CMS C中变…

【JS】获取 Headers 头部信息

一、应用场景 当我们请求一个接口的时候&#xff0c;会发现 res 里面包含一个 headers 响应头信息&#xff1a; fetch(url, {method: GET,headers: {content-type: application/json,X-Requested-With: XMLHttpRequest,},mode: cors,credentials: include,}).then(res > {…

【算法】字符串转int类型思路及代码

文章目录 题目分析思路完整代码 题目 给你一个字符串&#xff0c;如何这个字符串符合日常的整形的书写规范&#xff0c;那么我们需要写出将其转化为int类型的方法&#xff0c;并且不能使用Java提供的API&#xff0c;比如parseInt方法。 分析 这道题考察的其实就是parseInt的…

亚马逊测评:提升产品排名、权重和销量的秘诀

亚马逊是全球最大的在线零售平台&#xff0c;覆盖了世界各地主要国家和地区&#xff0c;而随着平台商家的不断增加&#xff0c;为了提高自身排名&#xff0c;很多卖家开始寻找人员为他们的店铺和产品进行有偿评价&#xff0c;从而催生了亚马逊测评行业 亚马逊测评&#xff0c;…

笔试强训 Day6

选择题 1.十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A 146 B 148C 144 D 142 本题很简单&#xff1a;100除8&#xff0c;取余数&#xff0c;直到商为零&#xff0c;最后反向的串起余数即可 2.执行下面语句后的输出为&#xff08;&…

从传统开发到低代码:这是一次技术革命

近年来&#xff0c;随着人工智能等新兴技术的快速发展&#xff0c;软件开发行业也在不断演变。传统的软件开发流程需要大量的编程知识和时间&#xff0c;而且往往需要复杂的架构和开发环境。然而&#xff0c;随着低/无代码平台的出现&#xff0c;软件开发变得更加高效、简单和普…