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多进程同步Lock、Semaphore、Event实例
Nov 21 Python
Python中操作MySQL入门实例
Feb 08 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python如何生成各种随机分布图
Aug 27 Python
python的内存管理和垃圾回收机制详解
May 18 Python
python安装requests库的实例代码
Jun 25 Python
pytorch 求网络模型参数实例
Dec 30 Python
关于Tensorflow分布式并行策略
Feb 03 Python
TensorFlow打印输出tensor的值
Apr 19 Python
上手简单,功能强大的Python爬虫框架——feapder
Apr 27 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仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JS中操作JSON总结
2020/12/06 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
简明 Python 基础学习教程
2007/02/08 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
"火柴棍式"程序员面试题
2014/03/16 面试题
优秀教师获奖感言
2014/01/31 职场文书
中国好声音华少广告词
2014/03/17 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
人民币使用说明书
2019/04/17 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技