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爬取网易云音乐热门评论
Mar 31 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
python保留小数位的三种实现方法
Jan 07 Python
Python列表操作方法详解
Feb 09 Python
Django 自定义权限管理系统详解(通过中间件认证)
Mar 11 Python
python3让print输出不换行的方法
Aug 24 Python
详解python爬取弹幕与数据分析
Nov 14 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 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
Drupal7中常用的数据库操作实例
2014/03/02 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
制作特殊字的脚本
2006/06/26 Javascript
一个用js实现的页内搜索代码
2007/05/23 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
详解React 元素渲染
2020/07/07 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
python批量下载图片的三种方法
2013/04/22 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
python if not in 多条件判断代码
2016/09/21 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
详解Python3定时器任务代码
2019/09/23 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
python与pycharm有何区别
2020/07/01 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
优秀学生自我鉴定范例
2013/12/18 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
房产分割协议书范文
2014/11/21 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
Android中的Launch Mode详情
2022/06/05 Java/Android