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版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
Linux 修改Python命令的方法示例
Dec 03 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
pytorch 实现多个Dataloader同时训练
May 29 Python
如何利用Python实现一个论文降重工具
Jul 09 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
厨房工作人员岗位职责
2013/11/15 职场文书
人力资源经理自我评价
2014/01/04 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
感谢信格式范文
2015/01/22 职场文书
主持稿开场白
2015/06/01 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
七年级作文之冬景
2019/11/07 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL