Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析
发表于:2024-09-29 作者:千家信息网编辑
千家信息网最后更新 2024年09月29日,这篇文章给大家介绍Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先说一下,这里解决的问题应
千家信息网最后更新 2024年09月29日Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析首先说一下,这里解决的问题应用场景: sparksql处理Hive表数据时,判断加载的是否是分区表,以及分区表的字段有哪些?再进一步限制查询分区表必须指定分区? 这里涉及到两种情况:select SQL查询和加载Hive表路径的方式。这里仅就"加载Hive表路径的方式"解析分区表字段,在处理时出现的一些问题及解决作出详细说明。 如果大家有类似的需求,建议通过解析Spark SQL logical plan和下面说的这种方式解决方案结合,封装成一个通用的工具。 如, hive_path的几种指定方式会导致这种情况的发生(test_partition是一个Hive外部分区表,dt是它的分区字段,分区数据有dt为20200101和20200102): 1.hive_path 为"/spark/dw/test.db/test_partition/dt=20200101" 2.hive_path为"/spark/dw/test.db/test_partition/*" 我这里主要给出几个源码段,结合上述xmind图理解:
1.hive_path为/spark/dw/test.db/test_partition/dt=20200101 2.hive_path为/spark/dw/test.db/test_partition/*
这两种情况导致源码if(basePaths.contains(currentPath))为true,还没有解析分区就重置变量finished为true跳出循环,因此最终生成的结果也就没有分区字段: sparkSession.read.option("basePath","/spark/dw/test.db/test_partition") 2.主要重写basePaths方法和parsePartition方法中的处理逻辑,同时需要修改其他涉及的代码。由于涉及需要改写的代码比较多,可以封装成工具
这篇文章给大家介绍Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
问题现象
sparksql加载指定Hive分区表路径,生成的DataSet没有分区字段。
sparkSession.read.format("parquet").load(s"${hive_path}"),hive_path为Hive分区表在HDFS上的存储路径。
因为牵涉到的源码比较多,这里仅以示例的程序中涉及到的源码中的class、object和方法,绘制成xmind图如下,想细心研究的可以参考该图到spark源码中进行分析。
问题分析
在没有指定参数basePath的情况下:
sparksql底层处理后得到的basePaths: Set(new Path("/spark/dw/test.db/test_partition/dt=20200101"))【伪代码】
leafDirs: Seq(new Path("/spark/dw/test.db/test_partition/dt=20200101"))【伪代码】
sparksql底层处理后得到的basePaths: Set(new Path("/spark/dw/test.db/test_partition/dt=20200101"),new Path("/spark/dw/test.db/test_partition/dt=20200102"))【伪代码】
leafDirs: Seq(new Path("/spark/dw/test.db/test_partition/dt=20200101"),new Path("/spark/dw/test.db/test_partition/dt=20200102"))【伪代码】
解决方案(亲测有效)
1.在Spark SQL加载Hive表数据路径时,指定参数basePath,如
关于Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
字段
分区表
查询
代码
源码
路径
处理
分析
情况
方式
问题
示例
数据
方法
条件
格式
内容
参数
工具
底层
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
获取微信服务器ip
网络安全宣传日活动总结
软件开发需要考cisp吗
广州慧源通网络技术有限公司
java宠物商店数据库
软件开发如何去管理
梧州软件开发定制
少先队员网络安全小提案范文
数据库访问范围
潮州无限软件开发价钱
西藏党员教育软件开发
金牛互联网科技信息有限公司
江苏综合软件开发销售
以下不属于网络安全设备
飞像网络技术有限公司
网络安全认证第一步考什么
电话机服务器
软件开发运行阶段的主要工作
关联云服务器地址
学校网络安全海报
萤火虫软件开发
互联网科技对共享汽车的影响
网站菜单数据库设计
达梦数据库产品技术
武大网络安全学院录取分数线
网络安全和医疗哪个好
ice服务器事件
乌海软件开发专业价格
图书管理系统数据库sql建表
吉林软件开发研发公司