explode与lateral view使用详解(spark及hive环境对比)

这篇具有很好参考价值的文章主要介绍了explode与lateral view使用详解(spark及hive环境对比)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HIVE环境

1.explode 炸裂函数

定义:explode函数能够将array及map类型的数据炸开,实现一行变多行

格式:select explode(array/map) from table

示例

原始数据tmp表

name

id

goods

a

1

book_a,food_a

b

2

book_b,food_b

c

3

null 

with tmp as (
select 'a' name,'1' as id,'book_a,food_a' as goods
union all 
select 'b' name,'2' as id,'book_b,food_b' as goods 
union all
select 'c' name,'3' as id,null as goods 
)
select explode(split(goods,','))  as goods_col
from tmp

输出结果

goods_col

book_a

food_a

book_b

food_b

注意
1.如果炸开字段为null值,则会被直接过滤掉
2.hive环境下使用explode函数只能select explode炸开的列,且仅能包含单个explode,其他列无法取到。如
select explode(split(goods,','))  as goods_col
       ,name
       ,id
from tmp
则会报错

2.lateral view侧视图

定义:Lateral 也是用来对数组进行列转行的,Lateral View主要解决在select使用UDTF(如explode)做查询的过程中查询只能包含单个UDTF,不能包含其它字段以及多个UDTF的情况(及不能添加额外的select列的问题)

格式:tabelA lateral view UDTF(xxx) 视图别名(虚拟表名) as a,b,c

示例:

with tmp as (
select 'a' name,'1' as id,'book_a,food_a' as goods
union all 
select 'b' name,'2' as id,'book_b,food_b' as goods 
union all
select 'c' name,'3' as id,null as goods 
)
select name,id,goods_col
from tmp
lateral view explode(split(goods,',')) tmp_table as goods_col

输出结果

name

id

goods_col

a

1

book_a

a

1

food_a

b

2

book_a

b

2

food_b

注意
1.如果炸开字段为null值,则会被直接过滤掉

特别的,如果想要保留炸开字段为空值的行,则可以使用lateral view 来实现,对上述查询逻辑进行改动

with tmp as (
select 'a' name,'1' as id,'book_a,food_a' as goods
union all 
select 'b' name,'2' as id,'book_b,food_b' as goods 
union all
select 'c' name,'3' as id,null as goods 
)
select name,id,goods_col
from tmp
lateral view outer explode(split(goods,',')) tmp_table as goods_col

输出结果

name

id

goods_col

a

1

book_a

a

1

food_a

b

2

book_a

b

2

food_b

c

3

null

spark

1.explode 炸裂函数

        spark中的炸裂函数explode具备hive中的explode的功能,不同的是,spark中使用explode函数在select时能够筛选额外的列

with tmp as (
select 'a' name,'1' as id,'book_a,food_a' as goods
union all 
select 'b' name,'2' as id,'book_b,food_b' as goods 
union all
select 'c' name,'3' as id,null as goods 
)
select name,id,explode(split(goods,','))  as goods_col
from tmp

输出结果

name

id

goods_col

a

1

book_a

a

1

food_a

b

2

book_a

b

2

food_b

        因此在spark中explode 近似可理解为等同于 lateral view explode,同时,spark中也支持explode_outer 等同于 lateral view outer explode

2.lateral view侧视图

        spark中使用lateral view侧视图与hive中完全一致文章来源地址https://www.toymoban.com/news/detail-777712.html

到了这里,关于explode与lateral view使用详解(spark及hive环境对比)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Hive 中的爆炸函数( lateral view 与 explode 用法)

    explode就是将hive一行中复杂的array或者map结构拆分成多行。 lateral view用于和split, explode等函数一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合

    2024年02月12日
    浏览(14)
  • Hive中的explode函数、posexplode函数与later view函数

      在离线数仓处理通过HQL业务数据时,经常会遇到行转列或者列转行之类的操作,就像concat_ws之类的函数被广泛使用,今天这个也是经常要使用的拓展方法。 2.1 函数语法 2.2 函数说明 explode 函数是UDTF 函数,将hive一列中复杂的array或者map结构拆分成多行。 Explode函数是不允

    2024年04月09日
    浏览(11)
  • Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    Hive SQL 中ARRAY或MAP类型数据处理:lateral view explode()/posexplode()——行转列函数

    前言:在对表数据进行批量处理过程中,常常碰上某个字段是一个array或者map形式的字段,一列数据的该字段信息同时存在多个值,当我们需要取出该数组中的每一个值实现一一对应关系的时候,可以考虑使用lateral view explode()/posexplode() 进行处理。 一、提要:explode()本身是

    2024年02月04日
    浏览(12)
  • hive lateral view 实践记录(Array和Map数据类型)

    hive lateral view 实践记录(Array和Map数据类型)

    目录 一、Array 1.建表并插入数据  2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 正确插入数据: 原数据 结果:  --------最开始错误的插入数据法-------  原数据  step1: step2: 备注: 比原表数据少了 双引号 综上,以上的插入数据是不对的!!

    2024年02月11日
    浏览(9)
  • Presto、Spark 和 Hive 即席查询性能对比

    Presto、Spark 和 Hive 是三个非常流行的大数据处理框架,它们都有着各自的优缺点。在本篇博客文章中,我们将对这三个框架进行详细的对比,以便读者更好地了解它们的异同点。 Presto 是一个开源的分布式 SQL 查询引擎,它可以在多个数据源之间进行查询,并且可以快速地处理

    2024年02月16日
    浏览(8)
  • Hive on Spark环境搭建

    Hive on Spark环境搭建

    Hive 引擎包括:默认 MR、tez、spark 最底层的引擎就是MR (Mapreduce)无需配置,Hive运行自带 Hive on Spark:Hive 既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark,Spark 负责采用 RDD 执行。 Spark on Hive : Hive 只作为存储元数据,Spark 负责 SQL 解析优化,语

    2024年02月13日
    浏览(8)
  • 大数据Hive篇:explode 和 posexplode

    大数据Hive篇:explode 和 posexplode

    一. explode单独使用。 1.1. 用于array类型的数据 table_name 表名 array_col 为数组类型的字段 new_col array_col被explode之后对应的列 1.2. 用于map类型的数据 由于map是kay-value结构的,所以它在转换的时候会转换成两列,一列是kay转换而成的,一列是value转换而成的。 table_name 表名 map_col 为

    2024年02月13日
    浏览(9)
  • Hadoop+Hive+Spark+Hbase开发环境练习

    Hadoop+Hive+Spark+Hbase开发环境练习

    1.练习一 1. 数据准备 在hdfs上创建文件夹,上传csv文件 [root@kb129 ~]# hdfs dfs -mkdir -p /app/data/exam 查看csv文件行数 [root@kb129 ~]# hdfs dfs -cat /app/data/exam/meituan_waimai_meishi.csv | wc -l 2. 分别使用 RDD和 Spark SQL 完成以下分析(不用考虑数据去重) 开启spark shell [root@kb129 ~]# spark-shell (1)加载

    2024年02月03日
    浏览(13)
  • docker本地搭建spark yarn hive环境

    ​ 为了学习大数据处理相关技术,需要相关软件环境作为支撑实践的工具。而这些组件的部署相对繁琐,对于初学者来说不够友好。本人因为工作中涉及到该部分内容,通过参考网上的资料,经过几天摸索,实现了既简单又快捷的本地环境搭建方法。特写下该文章,加以记录

    2024年03月10日
    浏览(9)
  • hive on spark集群环境部署(彻底摆脱做毕设没环境)

    hive on spark集群环境部署(彻底摆脱做毕设没环境)

     1.1.1所需下载的rpm包  1.1.2所需驱动包下载 1.3.1卸载干扰依赖 1.3.2安装所需的依赖 1.4.1切换root用户  1.4.2执行脚本 1.4.3脚本解析 1.4.4退出root用户到student用户 1.4.5登录测试 2.1.1把hive-3.1.3.tar.gz上传到linux的/opt/software目录下 2.1.2 解压hive-3.1.3.tar.gz到/opt/module/目录下面 2.1.3 修改h

    2024年02月04日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包