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数据统计的一些小技巧
Jul 21 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
Python探索之ModelForm代码详解
Oct 26 Python
Python实现的求解最大公约数算法示例
May 03 Python
Python 生成 -1~1 之间的随机数矩阵方法
Aug 04 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
Python实现12306火车票抢票系统
Jul 04 Python
django为Form生成的label标签添加class方式
May 20 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
python实现代码审查自动回复消息
Feb 01 Python
jupyter 添加不同内核的操作
Feb 06 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 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代码 适用于登陆页面制作
2016/08/17 PHP
基于jQuery的星级评分插件
2011/08/12 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
python实现按首字母分类查找功能
2019/10/31 Python
浅析python中while循环和for循环
2019/11/19 Python
Python进程池Pool应用实例分析
2019/11/27 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python过滤序列元素的方法
2020/07/31 Python
简述 Python 的类和对象
2020/08/21 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
 Alo Yoga官网:购买瑜伽服装
2018/06/17 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
《小猫刮胡子》教学反思
2014/02/21 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
领导工作表现评语
2015/01/04 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python