百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Spark2.4 jdbc中加入hint

moboyou 2025-03-29 15:05 12 浏览

Spark 我们知道是可以连接数据库的,可以通过spark的API spark.read.jdbc 中可以读取oracle的数据。

但是很多时候我们读取数据库的时候不会全表读,需要加入查询条件,例如 创建时间。这个时候我们调用spark的jdbc的时候,需要指定查询的分区。

例如 查询 created_time 在 2019年1月~2019年2月之间 的数据,表是table1。

如果写

 spark.read.jdbc(prop.getProperty("url"), "table1", prop)
.filter("created_time>=cast('xxxxx' as timestamp) and created_time<cast('xxx' as timestamp)")

那么,恭喜你,完了,如果table1 是一张大表,你这样查询 会直接让公司dba找你。

其次,你也无法有效利用spark的并发,这么做只会有一个task任务,这个任务就是执行 select * from ..... where ....

那么稍微明智点。每个task任务查询一天的数据。

spark.read.jdbc(prop.getProperty("url"), "table1", Array("created_time>=to_Date('xxxx','yyyymmdd') and created_time=to_Date('xxxx','yyyymmdd') and created_time<to_Date('xxxx','yyyymmdd')"......), coreProp)

这样,tasknum=3的话,起码每次会跑3个任务,也就是说 同时查3天的数据,稍微好点了。

但是 其实我们需要对数据库压力尽可能的小,如果table1 有created_time的单独索引还好,但是要是没有单独索引,而是有多个联合索引,那么万一选错了索引就会增大数据库的查询压力。

这个时候就需要用到hint了,数据库的hint可以尽可能的让本次查询按照我们自己指定的索引去查询。

可问题是 spark提供的API中 貌似没有可以加 hint的地方,那难道只能修改spark的源码了吗?

答案是

不。

其实,我们仔细看,spark 的jdbc中对 table 并没有强制的校验。可以把table变成一个查询,例如

table 变成 (select /*+index(A IDX_BILL_UPDATE ) */... from A where ....)t

这样就完成了 hint的引用了。

多想一下,就可以做到更多的事情了。

当然为了尽可能的利用CPU,还可以使用 ExecutorService 做 多线程。

在多线程中运行spark任务,这样运行的效率会更高,当然中间会有坑,例如 如何解决


办法肯定是有的,但是就不再这里一一赘述了。本次就 讲到spark中如何使用hint去查询数据。

相关推荐

C#与Docker完美结合:容器化部署实战,让你的应用秒级上线!

在当今快速迭代的软件开发环境中,高效的部署流程对于产品的成功至关重要。容器化技术,尤其是Docker,已成为实现快速、可靠部署的首选方案。对于C#开发者而言,将C#应用与Docker相结合,能够显著提...

我找到了最适合NAS的记账应用,开源自托管,适合国人的记账方式

「亲爱的粉丝朋友们好啊!今天熊猫又来介绍好玩有趣的Docker项目了,喜欢的记得点个关注哦!」引言其实记账软件熊猫之前也发过几个,不过使用起来都不是很理想,要么界面设计不太好看,要么就是项目过于复杂了...

手搓各种软件!手把手教学!(如何搓手)

shocked!太炸裂了!大家看下这个星标就知道了,youdefinitelyneedtoputittoyourfavorites!这是GitHub上排名第二的开源项目,它能手把手教你...

看了《碟中谍8》之后,才发现特工们的黑科技我们NAS用户也能拥有

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:Stark-C#头条兴趣联欢会#哈喽小伙伴们好,我是Stark-C~最近《碟中谍8:最终清算》正在热播,作为碟中谍的老粉,我前几天带着家人...

NAS原来这么有用:利用docker 一键部署mstream私人云音乐

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:熊猫不是猫QAQ前言你是否面临以下困扰:曾经想听以前某首音乐,但在网上已经找不到了;即使找到了,因版权原因无法在线听,甚至无法下载;有些曲子...

一见钟情!这就是你在寻找的Docker界面!优雅而不简单—Arcane

「亲爱的粉丝朋友们好啊!今天熊猫又来介绍好玩有趣的Docker项目了,喜欢的记得点个关注哦!」引言要说DockerUI项目,知名的其实就那么几个,目前感觉备用的比较多的还是老牌的portainer,...

大神级产品:手机装 Linux 运行 Docker 如此简单

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...

在 Docker 中运行 Mac OS 是什么样的体验

大家好,我是你们的章鱼猫。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现...

Docker 容器的 5 个实践案例(每天5分钟玩转docker容器技术)

Docker是一个开源平台,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。大多数Docker容器的核心是在虚拟化环境中运行的轻量级Linux服务器。DockerLinu...

使用 Docker Model Runner 在本地构建 GenAI 应用程序

想要在本地运行大型语言模型(LLM)?以下是在您自己的桌面上设置DockerModelRunner并访问LLM的方法。DockerModelRunner是DockerDeskt...

docker部署一个证件照工具HivisionIDPhotos,非常好用!

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:略懂的大龙猫今天给大家推荐一个很好玩的开源应用HivisionIDPhotos。这个工具原理是利用AI模型对照片进行一系列处理:智能抠...

好好看,好好学!Docker玩法深度教学,小白也能轻松上手

Docker对于大多数NAS玩家来说想必都非常熟悉,即便没用过,也应该接触过相关的一些内容。就我个人来说,对于评价一台NAS是否好用,Docker功能占据了不小的比重。8月份终于是又更新了一个大版本,...

开源&amp;Docker:自动录制小姐姐,docker部署各平台的自动录制工具

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:可爱的小cherry前言大家好,这里是可爱的Cherry。今天给大家分享一下小姐姐们录屏工具,配置完成以后可以自动监听直播并实现自动录播。支...

目前发现的一些有趣的docker容器—第十一弹

前言本期又是整理汇总的文章,依然是针对NAS下可搭建的一些docker容器的汇总,涉及可能会有介绍过的容器和没介绍过但不太好用的容器,感兴趣的可以翻翻之前的文章哦!!!也欢迎留言你发现的一些有趣的或者...

数人科技王璞:Docker与Mesos的结合应用

2015年4月16-18日,由CSDN主办、CSDN专家顾问团支持的OpenCloud2015大会将在北京国家会议中心拉开帷幕。为期三天的大会,以推进行业应用中的云计算核心技术发展为主旨,聚焦技术...