栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive 行转列、列转行

Hive 行转列、列转行

Hive行列之间的转换 行转列

数据说明:

# 原数据格式
《疑犯追踪》    悬疑
《疑犯追踪》    动作
《疑犯追踪》    科幻
《疑犯追踪》    剧情
《战狼2》       战争
《战狼2》       动作
《战狼2》       灾难

# 转换后数据格式
《疑犯追踪》    悬疑,动作,科幻,剧情
《战狼2》       战争,动作,灾难
  • 创建表
drop table movie_info;
create table movie_info(
    movie string, 
    category string) 
row format delimited fields terminated by " "
;
  • 加载表数据
load data local inpath "/opt/data/zj/movie.txt" into table movie_info;
  • 实现方式
-- 数据格式
select movie,concat_ws(',',collect_set(category)) name from movie_info group by movie;

先将需要聚合的字段,存放到一个集合中,然后再通过 “,” 相互链接

  • 函数说明:
    collect_set: 具有去重操作
    collect_list:不去重
    concat_ws:字符串的拼接
列转行
# 原数据格式
《疑犯追踪》    悬疑,动作,科幻,剧情
《战狼2》       战争,动作,灾难

# 转换后数据格式
《疑犯追踪》    悬疑
《疑犯追踪》    动作
《疑犯追踪》    科幻
《疑犯追踪》    剧情
《战狼2》       战争
《战狼2》       动作
《战狼2》       灾难
  • 创建表
drop table movie_info;
create table movie_info(
    movie string, 
    category string) 
row format delimited fields terminated by " "
-- collection items terminated by ","  -- 指定Array、Map类型数据的分割符
;
  • 加载表数据
load data local inpath "/opt/data/zj/movie.txt" into table movie_info;
  • 实现方式
-- explode() 函数只支持:Array类型数据 与 Map类型数据,其余数据类型不支持
select
    movie,
    category_name
from 
    movie_info lateral view explode(split(regexp_extract(concat('["',category,'"]'),'^\["(.*)\"]$',1),',')) table_tmp as category_name;

hive的列转行是稍微比较难理解,列转行需要使用explode函数,但是,该函数只支持Array类型数据或者map类型的数据,不支持string和int类型数据,这就需要我们将该类型强制转换。
String类型转换为Array类型:

select split(regexp_extract(concat('["',category,'"]'),'^\["(.*)\"]$',1),',') from movie_info;

["悬疑","动作","科幻","剧情"]
["战争","动作","灾难"]

到此,我们的行转列、列转行已经完成统计

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号