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 网络编程常用代码段
Aug 28 Python
Django中反向生成models.py的实例讲解
May 30 Python
pandas 读取各种格式文件的方法
Jun 22 Python
在python 中实现运行多条shell命令
Jan 07 Python
用python拟合等角螺线的实现示例
Dec 27 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
python多进程使用函数封装实例
May 02 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
什么是Python包的循环导入
Sep 08 Python
python利用appium实现手机APP自动化的示例
Jan 26 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个人网站架设连环讲(二)
2006/10/09 PHP
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
javascript关于继承解析
2016/05/10 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JS中的作用域链
2017/03/01 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
深入浅析python继承问题
2016/05/29 Python
flask-restful使用总结
2018/12/04 Python
python将字母转化为数字实例方法
2019/10/04 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Python3实现飞机大战游戏
2020/04/24 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
数据库测试通常都包括哪些方面
2015/11/30 面试题
《和田的维吾尔》教学反思
2014/04/14 职场文书
法院授权委托书范文
2014/08/02 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
党员民主评议个人总结
2014/10/20 职场文书
小学家长通知书评语
2014/12/31 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python
在 Python 中利用 Pool 进行多线程
2022/04/24 Python
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android