python 实现 hive中类似 lateral view explode的功能示例


Posted in Python onMay 18, 2020

背景:加入现在有这样的数据,可能一条ocr代表两个label,并且label通过","分隔。我们想把数据转换成下面的。

原始数据:

label ocr
日常行车服务,汽车资讯 去加油站,加完油后直接离开?最开心的可能是加油站的工作人员
社会民生 已致2死20伤 !景区突遭尘卷风袭击,孩子被卷上天!现场画面曝光

目标数据:

label ocr
日常行车服务 去加油站,加完油后直接离开?最开心的可能是加油站的工作人员
汽车资讯 去加油站,加完油后直接离开?最开心的可能是加油站的工作人员
社会民生 已致2死20伤 !景区突遭尘卷风袭击,孩子被卷上天!现场画面曝光

实现办法:

1.通过hive代码:

select ocr,split(tag_info,',') label
from 
(
 select label,ocr 
 from t1
 lateral view explode(split(label,',')) TableName as tag_info 
) t;

要注意的是一定要添加 t 语句另命名。

2.通过python代码:

df0 = pd.DataFrame({'A':[[1,2],[5,6]],'B':[10,-20]})
df0 = df
df0.columns = ['A','B']
rows = []
for i, row in df0.iterrows():
 for a in row.A.split(","):
 rows.append((a, row.B))
df222 = pd.DataFrame(rows, columns=df.columns)
df222

补充知识:hive中的lateral view(侧视图) 与 explode函数的使用

今天偶然间发现了一个hive中列转行的小题目,需要用到lateral view 和 explode函数,刚好借这题说说lateral view 与 explode函数的使用。

题目是这样:

原数据表如下图

movie category
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼2》 战争,动作,灾难

需求:将电影分类中的数组数据展开。

结果如下:

《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪

先简单聊几句理论:explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分),本身已经违背了数据库的设计原理(不论是业务系统还是数据仓库系统),不过大数据技术普及后,很多类似pv,uv的数据,在业务系统中是存贮在非关系型数据库中,用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身手。

explode作用是处理map结构的字段,使用案例如下:

//建表语句
create table movie_info(
movie string,
category array<string>
)
row format delimited fields terminated by '\t'
collection items terminated by ',';
//加载数据
load data local inpath '/opt/data/movie.txt' into table movie_info;

看下explode函数效果,以拆解category为例,可与原数据表结构对比。

select explode(category) from movie_info;

python 实现 hive中类似 lateral view explode的功能示例

LATERAL VIEW的使用:

用法:

LATERAL VIEW udtf(expression) tableAlias AS columnAlias

解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

select movie,category_name
from movie_info
lateral view explode(category) table_emp as category_name;

效果如下:

python 实现 hive中类似 lateral view explode的功能示例

其中lateral view explode(category) table_emp相当于一个虚拟表,与原表movie_info笛卡尔积关联,也可以多重使用。那么问题就这样解决了。

以上这篇python 实现 hive中类似 lateral view explode的功能示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
python用户管理系统的实例讲解
Dec 23 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
TensorFlow实现卷积神经网络
May 24 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
基于python实现百度翻译功能
May 09 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
Python中os模块功能与用法详解
Feb 26 Python
python Tornado框架的使用示例
Oct 19 Python
Python实现中英文全文搜索的示例
Dec 04 Python
Python基础之pandas数据合并
Apr 27 Python
pandas dataframe 中的explode函数用法详解
May 18 #Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 #Python
Win 10下Anaconda虚拟环境的教程
May 18 #Python
python异常处理之try finally不报错的原因
May 18 #Python
Pandas实现一列数据分隔为两列
May 18 #Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 #Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 #Python
You might like
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
Python创建xml的方法
2015/03/10 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
仓库班组长岗位职责
2013/12/12 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
初中学生期末评语
2014/04/24 职场文书
化学专业自荐信
2014/05/28 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
Python函数中的不定长参数相关知识总结
2021/06/24 Python