Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章给大家介绍Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先说一下,这里解决的问题应
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
软件测试平台是软件开发吗
全国网络安全平台
网络技术部一般在哪个军区
同期资料数据库
软件开发流程 书籍
江苏网络时间服务器专家云主机
csgo 网络安全宣传周
数据库最多承受多少连接
二手房软件开发新房源神器
赴日本软件开发 bse
软件开发人员驻场怎么样
杭州晶灿网络技术有限公司
湖南服装外贸软件开发
网络安全风险问题调研
网络安全审查办法草案征求意见
软件开发工具的过程
浦东新区智能化软件开发要多少钱
广东广电u点家庭服务器亮黄灯
2018年中国网络安全会
防范网络安全的标语
rest查询数据库
收银机数据库技术
效果图软件开发公司
网络安全教育日的主题
亲子共学网络安全
模型软件开发公司
网络安全测评师主要负责什么
农业部网络安全通知
工业软件开发专业学什么
博弈大师服务器条件单