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中使用Boolean操作符做真值测试实例
Jan 30 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
详细分析Python collections工具库
Jul 16 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
2021年最新用于图像处理的Python库总结
Jun 15 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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
javascript中的面向对象
2017/03/30 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
windows 下python+numpy安装实用教程
2017/12/23 Python
python如何将图片转换为字符图片
2020/08/19 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
Python self用法详解
2020/11/28 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
乡镇干部十八大感言
2014/02/17 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
2014年冬季防火方案
2014/05/21 职场文书
委托书怎么写
2014/07/31 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
街道务虚会发言材料
2014/10/20 职场文书
期末复习计划
2015/01/19 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers