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 02 Python
python基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
OpenCV实现人脸识别
Apr 07 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
Mar 19 Python
python随机取list中的元素方法
Apr 08 Python
python清除字符串中间空格的实例讲解
May 11 Python
python 获取字符串MD5值方法
May 29 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
浅析python redis的连接及相关操作
Nov 07 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
Python 批量下载阴阳师网站壁纸
May 19 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
关于尾递归的使用详解
2013/05/02 PHP
深入php多态的实现详解
2013/06/09 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
跨浏览器的事件对象介绍
2012/06/27 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
tornado框架blog模块分析与使用
2013/11/21 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Python中的集合介绍
2019/01/28 Python
详解python的四种内置数据结构
2019/03/19 Python
python打开使用的方法
2019/09/30 Python
python collections模块的使用
2020/10/16 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
元旦寄语大全
2014/04/10 职场文书
反邪教标语
2014/06/23 职场文书
建筑管理专业求职信
2014/07/28 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书