政府门户网站的建设目标/本周新闻热点10条
参考
https://blog.csdn.net/m53931422/article/details/103633452
https://www.cnblogs.com/jasonlam/p/7928179.html
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
https://medium.com/@jackgoettle23/building-a-hive-user-defined-function-f6abe92f6e56
https://blog.csdn.net/qq_73339471/article/details/140763754
https://blog.csdn.net/cuichunchi/article/details/109772461
https://blog.csdn.net/weixin_35852328/article/details/86509506
https://cn.vuejs.org/
https://element.eleme.cn/#/zh-CN
https://echarts.apache.org/zh/index.html
https://spring.io/
https://baomidou.com/
本文的视频版本:https://www.bilibili.com/video/BV1itYLe1E8y,讲解更详细
数据
图书外借数据 | 图书预约数据 | 读者入馆数据 | ||||||
---|---|---|---|---|---|---|---|---|
字段 | 说明 | 备注 | 字段 | 说明 | 备注 | 字段 | 说明 | 备注 |
UNIVERSITY_ID | 学校代码 | 10280 | UNIVERSITY_ID | 学校代码 | UNIVERSITY_ID | 学校代码 | 10280 | |
PATRON_ID | 读者ID | PATRON_ID | 读者ID | PATRON_ID | 读者ID | |||
STUDENT_GRADE | 学生年级 | STUDENT_GRADE | 学生年级 | STUDENT_GRADE | 学生年级 | |||
PATRON_DEPT | 读者所在院系 | PATRON_DEPT | 读者所在院系 | PATRON_DEPT | 读者所在院系 | |||
PATRON_TYPE | 读者类型 | PATRON_TYPE | 读者类型 | PATRON_TYPE | 读者类型 | |||
LOAN_DATE | 外借日期 | 20130422 | OPEN_DATE | 预约日期 | 20131231 | VISIT_TIME | 入馆时间 | 2013-03-2520:54:42 |
LOAN_HOUR | 外借时间 | 1506 | OPEN_HOUR | 预约时间 | 1015 | VISIT_SUBLIBRARY | 入馆地点 | 01、02、03、04 - 宝山校区 |
05、06 - 延长校区 | ||||||||
07、08、09 - 嘉定校区 | ||||||||
DUE_DATE | 到期日期 | 20130522 | REQUEST_DATE | 预约兴趣期开始日期 | 20131231 | VISIT_TYPE | 出馆/入馆 | 无该字段 |
DUE_HOUR | 到期时间 | 2400 | END_REQUEST_DATE | 预约兴趣期结束日期 | 20140228 | |||
RETURNED_DATE | 归还日期 | 20130427 | HOLD_DATE | 预约满足日期 | 20140102 | |||
RETURNED_HOUR | 归还时间 | 1512 | END_HOLD_DATE | 预约保留日期 | 20140109 | |||
RETURNED_LOCATION | 归还地点 | 无该字段 | RECALL_STATUS | 预约催还状态 | 无该字段 | |||
RENEWAL_NO | 续借次数 | RECALL_DATE | 催还日期 | 无该字段 | ||||
LASTRENEW_DATE | 最后续借日期 | PROCESSING_DAYS | 满足时间长度 | 无该字段 | ||||
RECALL_DATE | 催还日期 | EVENT_TYPE | 预约类型 | 无该字段 | ||||
RECALL_DUE_DATE | 催还后应还日期 | FULFILLED | 预约需求是否满足 | Y - 等待中 | ||||
N - 已满足 | ||||||||
HOLD_DAYS | 外借天数 | 无该字段 | PICKUP_LOCATION | 取书点 | 详见附录1 | |||
OVERDUE_DAYS | 逾期天数 | 无该字段 | SUBLIBRARY | 图书所在分馆/馆藏地 | 详见附录1 | |||
SUBLIBRARY | 图书所在分馆/馆藏地 | 详见附录1 | ITEM_ID | 单册唯一记录号 | ||||
ITEM_ID | 单册唯一记录号 | ITEM_STATUS | 单册状态 | 详见附录2 | ||||
ITEM_STATUS | 单册状态 | 详见附录2 | ITEM_CALLNO | 单册索书号 | ||||
ITEM_CALLNO | 单册索书号 | PUBLISH_YEAR | 图书出版年 | |||||
PUBLISH_YEAR | 图书出版年 | AUTHOR | 图书作者 | |||||
AUTHOR | 图书作者 | TITLE | 图书题名 | |||||
TITLE | 图书题名 | PRESS | 图书出版社 | |||||
PRESS | 图书出版社 | ISBN | 图书ISBN号 | |||||
ISBN | ISBN号 | ID | 自动生成序号,主键 | |||||
ID | 自动生成序号,主键 |
共 1.25G
共 512MB
共 22.4 MB
乱码和字段乱序缺失
2019 年的外借数据的字符集为非 UTF-8,
在 Linux 上:
[jxd@102 lend_out]$ file -i lend_out_2019.csv
lend_out_2019.csv: text/plain; charset=unknown-8bitvim 文件后,:set fileencoding=utf-8 设置文件的编码[jxd@102 lend_out]$ file -i lend_out_2019.csv
lend_out_2019.csv: text/plain; charset=utf-8
发现没有解决,不是 Linux 上的乱码,经过排查,其它所有文件在 windows 环境下都为 utf-8 格式,这个文件为 GB2312 编码,使用 notepad++ 打开,设置编码为 utf-8,拷贝全文,新建一个 csv 文件,粘贴,新的 csv 文件的格式就为 utf-8 了。
2019 年外借数据存在缺失 id 字段、字段乱序的情况,导入到 MySQL 中,添加 id 字段,并置为 null (id 字段没有用),以新的字段顺序查询并将依据结果创建新表,再将数据导出为 csv 即可。
2019 年预约数据存在字段乱序情况,用上面的方法处理即可。
csv 的表头问题
每一个 csv 文件的表头都是字段名,导入到 Hive 中会被当作数据,需要删除,在 Linux 中,使用如下命令删除文件的第一行:
sed -i '1d' <fileName>
建表以及加载数据
create database shanghai_edu location '/warehouse/shanghai_edu';// 创建时间维度表
CREATE EXTERNAL TABLE `dim_date`
(`date_key` STRING COMMENT 'id',`date_ymd` STRING COMMENT '日期 yy-MM-dd',`date_ch` STRING COMMENT '中文日期',`dim_year` STRING COMMENT '年',`quarter_id` TINYINT COMMENT '季度数字',`quarter_ch` STRING COMMENT '中文季度',`year_month` STRING comment '年月',`dim_month` STRING comment '月份',`dim_day` STRING COMMENT '一年中的第几天',`dim_month_day` STRING COMMENT '一个月中的第几天',`dim_week` STRING COMMENT '一年中的第几周 星期一是星期的第一天',`year_week` STRING COMMENT '年周',`dim_week1` STRING COMMENT '一年中的第几周 星期天是星期的第一天',`dim_year1` STRING COMMENT '对应 dim_week1 的年份',`dim_weekday` STRING COMMENT '一周的中的第几天',`weekday_ch` STRING COMMENT '星期几',`holiday_name` STRING COMMENT '节假日名称',`is_day_off` TINYINT COMMENT '是否放假 1表示放假,0表示不放假 2表示调班'
) COMMENT '时间维度表'ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'location '/warehouse/shanghai_edu/dim/dim_date';load data local inpath '/opt/project/shanghai_edu/data/dim/dim_date.csv' into table shanghai_edu.dim_date;// 创建分场馆维度表
CREATE EXTERNAL TABLE if not exists shanghai_edu.dim_sub_library
(`sub_library_or_pickup_location` STRING COMMENT 'sub_library 或 pickup_location',`sub_library_location_name` STRING COMMENT '分场馆所在地址'
) COMMENT '分场馆维度表'
STORED AS PARQUET
LOCATION '/warehouse/shanghai_edu/dim/dim_sub_library';
// 创建一张存储格式为 csv 的临时表
CREATE TABLE shanghai_edu.csv_table
(sub_library_or_pickup_location STRING,sub_library_location_name STRING
)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
// 将数据导入到临时表
load data local inpath '/opt/project/shanghai_edu/data/dim/dim_sublibrary.csv' into table shanghai_edu.csv_table;
INSERT overwrite TABLE shanghai_edu.dim_sub_library
SELECT * FROM shanghai_edu.csv_table;
drop table shanghai_edu.csv_table;// 创建入馆表
CREATE external table `ods_enter`
(`university_id` varchar(100) comment '学校代码 10280',`patron_id` varchar(100) comment '读者ID',`student_grade` varchar(100) comment '学生年级',`patron_dept` varchar(100) comment '读者所在院系',`patron_type` varchar(100) comment '读者类型',`visit_time` varchar(100) comment '入馆时间',`visit_sub_library` varchar(100) comment '入馆地点'
)COMMENT '入馆表'partitioned by (`year` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"","escapeChar" = "\\")location '/warehouse/shanghai_edu/ods/ods_enter';load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2013.csv' into table shanghai_edu.ods_enter partition (year = '2013');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2014.csv' into table shanghai_edu.ods_enter partition (year = '2014');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2015.csv' into table shanghai_edu.ods_enter partition (year = '2015');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2016.csv' into table shanghai_edu.ods_enter partition (year = '2016');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2017.csv' into table shanghai_edu.ods_enter partition (year = '2017');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2018.csv' into table shanghai_edu.ods_enter partition (year = '2018');
load data local inpath '/opt/project/shanghai_edu/data/enter/enter_2019.csv' into table shanghai_edu.ods_enter partition (year = '2019');// 创建外借表
CREATE external TABLE `ods_lend_out`
(`university_id` varchar(100) comment '学校代码 10280',`item_id` varchar(100) comment '单册唯一记录号',`loan_date` varchar(100) comment '外借日期',`sub_library` varchar(100) comment '图书所在分馆/馆藏地',`due_date` varchar(100) comment '到期日期',`loan_hour` varchar(100) comment '外借时间',`due_hour` varchar(100) comment '到期时间',`returned_date` varchar(100) comment '归还日期',`item_status` varchar(100) comment '单册状态',`returned_hour` varchar(100) comment '归还时间',`last_renew_date` varchar(100) comment '最后续借日期',`renewal_no` varchar(100) comment '续借次数',`recall_date` varchar(100) comment '催还日期',`item_call_no` varchar(100) comment '单册索书号',`recall_due_date` varchar(100) comment '催还后应还日期',`author` varchar(100) comment '图书作者',`publish_year` varchar(100) comment '图书出版年',`press` varchar(100) comment '图书出版社',`title` varchar(100) comment '图书题名',`ISBN` varchar(100) comment 'isbn',`patron_id` varchar(100) comment '读者ID',`patron_type` varchar(100) comment '读者类型',`student_grade` varchar(100) comment '学生年级',`id` varchar(100) comment 'id',`patron_dept` varchar(100) comment '读者所在院系'
)COMMENT '外借表'partitioned by (`year` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"","escapeChar" = "\\")location '/warehouse/shanghai_edu/ods/ods_lend_out';load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2013.csv' into table shanghai_edu.ods_lend_out partition (year = '2013');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2014.csv' into table shanghai_edu.ods_lend_out partition (year = '2014');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2015.csv' into table shanghai_edu.ods_lend_out partition (year = '2015');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2016.csv' into table shanghai_edu.ods_lend_out partition (year = '2016');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2017.csv' into table shanghai_edu.ods_lend_out partition (year = '2017');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2018.csv' into table shanghai_edu.ods_lend_out partition (year = '2018');
load data local inpath '/opt/project/shanghai_edu/data/lend_out/lend_out_2019.csv' into table shanghai_edu.ods_lend_out partition (year = '2019');// 创建预约表
CREATE external table ods_subscribe
(`university_id` varchar(100) comment '学校代码 10280',`open_date` varchar(100) comment '预约日期',`open_hour` varchar(100) comment '预约时间',`end_request_date` varchar(100) comment '预约兴趣期结束日期',`request_date` varchar(100) comment '预约兴趣期开始日期',`end_hold_date` varchar(100) comment '预约保留日期',`hold_date` varchar(100) comment '预约满足日期',`pickup_location` varchar(100) comment '取书点',`item_status` varchar(100) comment '单册状态',`sub_library` varchar(100) comment '图书所在分馆/馆藏地',`fulfilled` varchar(100) comment '预约需求是否满足',`item_call_no` varchar(100) comment '单册索书号',`item_id` varchar(100) comment '单册唯一记录号',`author` varchar(100) comment '图书作者',`publish_year` varchar(100) comment '图书出版年',`press` varchar(100) comment '图书出版社',`title` varchar(100) comment '图书题名',`ISBN` varchar(100) comment '图书 ISBN 号',`patron_id` varchar(100) comment '读者 ID',`patron_type` varchar(100) comment '读者类型',`student_grade` varchar(100) comment '学生年级',`id` varchar(100) comment 'id',`patron_dept` varchar(100) comment '读者所在院系'
) COMMENT '预约表'partitioned by (`year` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = ",","quoteChar" = "\"","escapeChar" = "\\")location '/warehouse/shanghai_edu/ods/ods_subscribe';load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2013.csv' into table shanghai_edu.ods_subscribe partition (year = '2013');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2014.csv' into table shanghai_edu.ods_subscribe partition (year = '2014');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2015.csv' into table shanghai_edu.ods_subscribe partition (year = '2015');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2016.csv' into table shanghai_edu.ods_subscribe partition (year = '2016');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2017.csv' into table shanghai_edu.ods_subscribe partition (year = '2017');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2018.csv' into table shanghai_edu.ods_subscribe partition (year = '2018');
load data local inpath '/opt/project/shanghai_edu/data/subscribe/subscribe_2019.csv' into table shanghai_edu.ods_subscribe partition (year = '2019');
使用 SQL 分析数据
外借次数、外借时间和用户类型的关系
CREATE EXTERNAL TABLE if not exists shanghai_edu.adm_lo_cnt_time_with_type_dd
(`patron_type` STRING COMMENT '读者类型',`lend_out_cnt` bigint COMMENT '借出数',`avg_lend_out_cnt` double comment '平均借出数',`min_duration` double comment '最小借出时间',`avg_duration` double comment '平均借出时间',`max_duration` double comment '最大借出时间'
) COMMENT '外借次数、外借时间和用户类型的关系'STORED AS PARQUETLOCATION '/warehouse/shanghai_edu/adm/adm_lo_cnt_time_with_type_dd';insert overwrite table shanghai_edu.adm_lo_cnt_time_with_type_dd
select patron_type, count(*) lend_out_cnt, round(count(*) / count(DISTINCT (patron_id)), 2) avg_lend_out_cnt, round(min((unix_timestamp(returned_date, 'yyyyMMdd') - unix_timestamp(loan_date, 'yyyyMMdd')) /(60 * 60 * 24)), 2) min_duration -- 单位为天, round(AVG((unix_timestamp(returned_date, 'yyyyMMdd') - unix_timestamp(loan_date, 'yyyyMMdd')) /(60 * 60 * 24)), 2) avg_duration, round(MAX((unix_timestamp(returned_date, 'yyyyMMdd') - unix_timestamp(loan_date, 'yyyyMMdd')) /(60 * 60 * 24)), 2) max_duration
from shanghai_edu.ods_lend_out
group by patron_type;
入馆次数、预约次数和读者类型的关系
CREATE EXTERNAL TABLE if not exists shanghai_edu.adm_ent_subscribe_cnt_with_type
(`patron_type` STRING COMMENT '读者类型',`enter_cnt` bigint COMMENT '总入馆次数/预约次数',`avg_lend_out_cnt` double comment '平均入馆次数/平均预约次数'
) COMMENT '入馆次数、预约次数和读者类型的关系'partitioned by (stat_type STRING COMMENT '统计类型(enter/subscribe)')STORED AS PARQUETLOCATION '/warehouse/shanghai_edu/adm/adm_ent_subscribe_cnt_with_type';set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table shanghai_edu.adm_ent_subscribe_cnt_with_type partition (stat_type)
select patron_type,count(*) enter_cnt,round(count(*) / count(DISTINCT (patron_id)), 2) avg_enter_cnt,'enter' stat_type
from shanghai_edu.ods_enter
group by patron_type
union all
select patron_type,count(*) sub_cnt,round(count(*) / count(DISTINCT (patron_id)), 2) avg_sub_cnt,'subscribe' stat_type
from shanghai_edu.ods_subscribe
group by patron_type
;
各分馆各年份的预约不满足率
CREATE EXTERNAL TABLE if not exists shanghai_edu.adm_subscribe_no_satisfy_lib_year_stat
(`no_fulfilled_ratio` double COMMENT '预约不满足率',`sub_library_location_name` string COMMENT '分馆位置',`subscribe_year` string comment '预约年份'
) COMMENT '各分馆各年份的预约不满足率统计表'STORED AS PARQUETLOCATION '/warehouse/shanghai_edu/adm/adm_subscribe_no_satisfy_lib_year_stat';insert overwrite table shanghai_edu.adm_subscribe_no_satisfy_lib_year_stat
select round(sum(if(fulfilled = '不满足', 1, 0)) / count(1), 4) no_fulfilled_ratio, sub_library_location_name, subscribe_year
from (// @formatter:offselectCASEWHEN fulfilled = 'N' THEN '不满足'WHEN fulfilled = 'Y' THEN '满足'ELSE '不知道'END AS fulfilled,coalesce(b.sub_library_location_name, '-') sub_library_location_name,coalesce(substr(open_date, 1, 4), '-') subscribe_yearfrom shanghai_edu.ods_subscribe aleft join shanghai_edu.dim_sub_library bon a.sub_library = b.sub_library_or_pickup_location// @formatter:on) tb_tmp
GROUP BY sub_library_location_name, subscribe_year
with cube;
预约不到的 top10 书籍
CREATE EXTERNAL TABLE if not exists shanghai_edu.adm_subscribe_no_satisfy_top
(`ISBN` string COMMENT 'isbn',`cnt` bigint COMMENT '预约不到次数'
) COMMENT '预约不到的 top10 书籍'STORED AS PARQUETLOCATION '/warehouse/shanghai_edu/adm/adm_subscribe_no_satisfy_top';insert overwrite table shanghai_edu.adm_subscribe_no_satisfy_top
selectISBN,count(1) cnt
from shanghai_edu.ods_subscribe
where fulfilled = 'N' and ISBN != ''
group by ISBN
order by cnt desc
limit 10
;
入馆时间分布
CREATE FUNCTION parseHour AS 'com.jxd.udf.ParseHour' USING JAR 'hdfs:///udf/yelp-udf-1.0-SNAPSHOT.jar';
reload function;
show functions;
drop function if exists formatVisitTime;
DESCRIBE FUNCTION formatVisitTime;CREATE FUNCTION formatVisitTime AS 'com.jxd.udf.FormatVisitTime' USING JAR 'hdfs:///udf/yelp-udf-1.0-SNAPSHOT.jar';CREATE EXTERNAL TABLE if not exists shanghai_edu.adm_enter_time_stat
(`holiday_name` string COMMENT '节日名称',`visit_hour` string COMMENT '入馆时间(小时)',`cnt` bigint comment '入馆数量'
) COMMENT '入馆时间分布统计表'
STORED AS PARQUET
LOCATION '/warehouse/shanghai_edu/adm/adm_enter_time_stat';// @formatter:off
insert overwrite table shanghai_edu.adm_enter_time_stat
select holiday_name, visit_hour, count(1) cnt
from
(select if(b.holiday_name is not null and b.holiday_name != '', b.holiday_name, '非节假日') holiday_name, parseHour(a.visit_time) visit_hourfrom shanghai_edu.ods_enter aleft join shanghai_edu.dim_date b on formatVisitTime(a.visit_time) = b.date_key
) tb_tmp
GROUP BY holiday_name, visit_hour
with cube;
;
hive udf
使用 java 编写一个 hive 的 udf,打包。
将 jar 包上传到 hdfs 上:
hadoop fs -mkdir /udf
hadoop fs -put yelp-udf-1.0-SNAPSHOT.jar /udf/
进入 hive 终端中,使用如下命令创建永久函数:
CREATE FUNCTION upper_case_udf AS 'com.jxd.udf.UpperCaseUDF' USING JAR 'hdfs:///udf/yelp-udf-1.0-SNAPSHOT.jar';
hive 终端当前所处的数据库就是这个函数的默认存放数据库,例如:default,如果是在 default 数据库中创建的 udf,在 default 数据库中使用 udf 就可以不携带数据库前缀,如果是在其他数据库中使用这个函数,就需要使用指定这个函数所在的数据库前缀来使用这个函数,比如:select default.upper_case_udf(‘aaa’);
upper_case_udf 是函数名,com.jxd.udf.UpperCaseUDF 是这个 udf 的类全限定名,最后是 jar 包对应的 hdfs 地址。
可以使用如下命令刷新函数:
RELOAD FUNCTION;
使用如下命令查询某个 udf 的描述:
DESCRIBE FUNCTION <function_name>;
使用如下命令删除函数:
DROP FUNCTION upper_case_udf;
如何在 datagrip 中更新函数:
- 执行删除函数的命令:
DROP FUNCTION upper_case_udf;
- 关闭项目,File -> Close Project
- 重新创建函数
CREATE FUNCTION upper_case_udf AS 'com.jxd.udf.UpperCaseUDF' USING JAR 'hdfs:///udf/yelp-udf-1.0-SNAPSHOT.jar';
导出 hive 数据到 mysql
本次使用 sqoop 将数据导出到 mysql:
bin/sqoop export \
--connect "jdbc:mysql://node112:3306/shanghai_edu?useUnicode=true&characterEncoding=utf-8" \
--username root \
--password 123456 \
--table adm_lo_cnt_time_with_type_dd \
--num-mappers 1 \
--hcatalog-database shanghai_edu \
--hcatalog-table adm_lo_cnt_time_with_type_dd
--hive-partition-key <partition_key> \
--warehouse-dir <hdfs_path_to_hive_table>
导出分区表的所有数据:
bin/sqoop export \
--connect "jdbc:mysql://node112:3306/shanghai_edu?useUnicode=true&characterEncoding=utf-8" \
--username root \
--password 123456 \
--table adm_ent_subscribe_cnt_with_type \
--num-mappers 1 \
--hcatalog-database shanghai_edu \
--hcatalog-table adm_ent_subscribe_cnt_with_type
--hive-partition-key stat_type \
--warehouse-dir /warehouse/shanghai_edu/adm/adm_ent_subscribe_cnt_with_type
问题
windows 上的中文文件名的文件上传到 centos 后变成乱码
原因在于,Windows 的文件名中文编码默认为 GBK,压缩或者上传后,文件名还会是 GBK 编码,而 Linux 中默认文件名编码为 UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。
安装 convmv:
yum install convmv
使用 convmv 将当前文件夹下的所有文件名转为 udf-8 编码:
convmv -f gbk -t utf-8 --notest -r ./
相关文章:

离线数据开发流程小案例-图书馆业务数据
参考 https://blog.csdn.net/m53931422/article/details/103633452 https://www.cnblogs.com/jasonlam/p/7928179.html https://cwiki.apache.org/confluence/display/Hive/LanguageManualUDF https://medium.com/jackgoettle23/building-a-hive-user-defined-function-f6abe9…...

GPT-5:未来已来,你准备好了吗
GPT-5:未来已来,你准备好了吗? 在人工智能的浩瀚星空中,自然语言处理(NLP)技术如同璀璨星辰,不断引领着技术革新的浪潮。而在这股浪潮中,OpenAI的GPT(Generative Pre-tr…...

白骑士的Matlab教学高级篇 3.2 并行计算
系列目录 上一篇:白骑士的Matlab教学高级篇 3.1 高级编程技术 并行计算是一种通过同时执行多个计算任务来加速程序运行的方法。在MATLAB中,并行计算工具箱(Parallel Computing Toolbox)提供了丰富的并行计算功能,使用…...

JS中【解构赋值】知识点解读
解构赋值(Destructuring Assignment)是 JavaScript 中一种从数组或对象中提取数据的简便方法,可以将其赋值给变量。这种语法可以让代码更加简洁、清晰。下面我会详细讲解解构赋值的相关知识点。 1. 数组解构赋值 数组解构赋值允许你通过位置…...

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object
【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 …...

第10章 无持久存储的文件系统 (1)
目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 前言 即存在于内存中的文件系统。如: proc: sysfs: 即/sys目录。 内容不一定是ASCII文本,可能是二进…...

如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来
1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境(参考文章),对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject,并且利用虚拟环境myvenv,怎么办&…...

keepalived+lvs高可用负载均衡集群配置方案
配置方案 一、配置主备节点1. 在主备节点上安装软件2. 编写配置文件3. 启动keepalived服务 二、配置web服务器1. 安装并启动http服务2. 编写主页面3.配置虚拟地址4. 配置ARP 三、测试 服务器IP: 主负载均衡服务器 master 192.168.152.71备负载均衡服务器 backup 192…...

Azure OpenAI Swagger Validation Failure with APIM
题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…...

haproxy高级功能配置
介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…...

XXL-JOB分布式定时任务框架快速入门
文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...

直流电机及其驱动
直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作 TB6612是一款双…...

Java-判断一个字符串是否为有效的JSON字符串
在 Java 中判断一个字符串是否为有效的 JSON 字符串,可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类,用于判断给定的字符串…...

FPGA开发板的基本知识及应用
FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路,能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口,以便…...

JVM知识总结(性能调优)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 性能调优 何时进行JVM调优? 遇到以下情况,…...

基于Ascend C的Matmul算子性能优化最佳实践
矩阵乘法是深度学习计算中的基础操作,对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器,其AI Core采用达芬奇架构,以高性能Cube计算引擎为基础,针对矩阵运算进行加速,可大幅提高单位面…...

SQL注入之EVAL长度限制突破技巧
要求: PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? widows小皮环境搭建: 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件,并在其输入代码环境 解题思路: 通…...
稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈
时间序列预测是许多领域的重要问题,包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中,提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻,但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...

详谈系统中的环境变量
目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们,基本都配置过环境变量(windows环境下),如果你也…...

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想
目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...

JavaScript模拟空调效果
JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化,因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过,我们可以通过JavaScript来模…...

14.2 Pandas数据处理
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

python学习7---多进程
一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明
文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...

Java后端面试题
Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...

【Git】远程仓库新建分支后,拉到本地开发
1. 在远程仓库上创建分支 2. git fetch origin:在本地同步远程仓库的分支(获取远程仓库所有分支的所有修改) 3. git remote -a:查看所有分支(远程+本地) 4. git checkout -b 本地名 远程仓库…...

React H5设置企业级v6版本路由的配置
路由配置是项目开发的必要一环,尤其是目前流行SPA,下面看看如何使用v6版本路由进行合理的H5路由配置 一、基本页面结构(目录根据开发要求建,下面仅用于展示配置路由) 二、具体文件实现 1. index.tsx import React f…...

【微信小程序】全局配置
1. 全局配置文件及常用的配置项 2.window (1).小程序窗口的组成部分 (2). 了解 window 节点常用的配置项 (3). 设置导航栏的标题 (4). 设置导航栏的背景色 (5). 设置导航栏的标题颜色 (6). 全局开启下拉刷新功能 (7). 设置下拉刷新时窗口的背景色 (8).设置下拉刷新时 loading …...

25届秋招网络安全面试资料库
吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…...

Adobe Dimension DN v4.0.2 解锁版下载安装教程 (专业的三维3D建模工具)
前言 Adobe Dimension(简称DN)是一款3D设计软件,三维合成和渲染工具,2D平面的二维转为3D立体的三维合成工具,用于3Dmax\C4D\MAYA等三维软件生成的效果图,在3D场景中排列对象、图形和光照。3D应用程序使用的…...