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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
Python走楼梯问题解决方法示例
Jul 25 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
Python实现AI自动抠图实例解析
Mar 05 Python
使用OpenCV对车道进行实时检测的实现示例代码
Jun 19 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
详解Python 中的 defaultdict 数据类型
Feb 22 Python
Opencv中cv2.floodFill算法的使用
Jun 18 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
window.location和document.location的区别分析
2008/12/23 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
如何消除inline-block属性带来的标签间间隙
2016/03/31 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python中将字典转换为列表的方法
2016/09/21 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python里 super类的工作原理详解
2019/06/19 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
python 导入数据及作图的实现
2019/12/03 Python
Django的CVB实例详解
2020/02/10 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
个人求职信范例
2014/01/29 职场文书
采购经理岗位职责
2014/02/16 职场文书
大型营销活动计划书
2014/04/28 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
初三语文教学计划
2015/01/22 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL