问题描述
在开发过程中使用spark去读取hive分区表的过程中(或者使用hive on spark、nodepad开发工具),部分开发人员未注意添加分区属性过滤导致在执行过程中加载了全量数据,引起任务执行效率低、磁盘IO大量损耗等问题。
解决办法
1、自定义规则CheckPartitionTable类,实现Rule,通过以下方式创建SparkSession。
2、自定义规则CheckPartitionTable类,实现Rule,将规则类追加至Optimizerbatches: Seq[Batch]中,如下。
规则内容实现
1、CheckPartitionTable规则执行类,需要通过引入sparkSession从而获取到引入conf;需要继承Rule[LogicalPlan];
2、通过splitPredicates方法,分离分区谓词,得到分区谓词表达式。在sql解析过程中将谓词解析为TreeNode,此处采用递归的方式获取分区谓词。
3、判断是否是分区表,且是否添加分区字段。
4、实现Rule的apply方法
大数据和云计算的关系
大数据JUC面试题
大数据之Kafka集群部署
大数据logstsh架构
大数据技术kafka的零拷贝
昨天在idea用scala class试运行第一个spark程序的时候一直报一个很奇怪的错。找不到spark下的sql包
后来根据网上的提示在build文件里加了依赖依旧没有解决问题,重新导入library等方法都没有解决问题。
后来发现是因为scala版本过高导致的,可能spark对scala版本有非常严格的要求。
通过在terminal中运行spark-shell可以查看到spark的版本信息。
首先cd 进入spark的文件夹,再打开sparkshell
在file structure>>library中重新添加scala版本设定为对应的版本,重新导入对应的包。注意这里build文件中的依赖别忘记改。
以上就是关于源码级解读如何解决Spark-sql读取hive分区表执行效率低问题全部的内容,包括:源码级解读如何解决Spark-sql读取hive分区表执行效率低问题、idea运行spark无法导入sql包object sql is not a member of package org.apache.spark、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)