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动态加载模块的3种方法
Nov 22 Python
通过Python来使用七牛云存储的方法详解
Aug 07 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
Python字符串格式化输出代码实例
Nov 22 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
解决python运行启动报错问题
Jun 01 Python
Python configparser模块操作代码实例
Jun 08 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 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数组的一些常见操作汇总
2011/07/17 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
Vuex简单入门
2017/04/19 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Python数据类型详解(四)字典:dict
2016/05/12 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python实现画出e指数函数的图像
2019/11/21 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
python爬虫容易学吗
2020/06/02 Python
django跳转页面传参的实现
2020/09/17 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
园艺师求职信
2014/04/27 职场文书
营运督导岗位职责
2015/04/10 职场文书
公司车队管理制度
2015/08/04 职场文书
单位车辆管理制度
2015/08/05 职场文书