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 相关文章推荐
python简单程序读取串口信息的方法
Mar 13 Python
简析Python的闭包和装饰器
Feb 26 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
Python 专题四 文件基础知识
Mar 20 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python中的集合介绍
Jan 28 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
python FTP编程基础入门
Feb 27 Python
python文件目录操作之os模块
May 08 Python
python实现自动清理文件夹旧文件
May 10 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
php抽象类使用要点与注意事项分析
2015/02/09 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php处理复杂xml数据示例
2016/07/11 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
详解Python3中的Sequence type的使用
2015/08/01 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
有关Python的22个编程技巧
2018/08/29 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
Python Numpy库常见用法入门教程
2020/01/16 Python
python设置表格边框的具体方法
2020/07/17 Python
Python 如何测试文件是否存在
2020/07/31 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
师范应届生求职信
2013/11/15 职场文书
应届毕业生求职信
2014/05/26 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
停发工资证明范本
2015/06/12 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电
MySQL如何使备份得数据保持一致
2022/05/02 MySQL