spark sql通过jdbc读取mysql时划分分区问题

当通过spark读取mysql时,如果数据量比较大,为了加快速度,通常会起多个task并行拉取mysql数据。
其中一个api是

参数 说明
url 访问mysql时的jdbc链接,如jdbc:mysql://190.1.98.225:2049/test
table 访问的表
columnName 用于分区的列,必须是数字类型
lowerBound 分区列的最小值
upperBound 分区列的最大值
numPartitions 预期的分区数
connectionProperties mysql的配置参数,key value形式

这里面容易引起混淆的是lowerBound和upperBound。需要注意的是lowerBound和upperBound仅用于决定划分分区时的步长,而不是用于按照这两个值对数据进行过滤。 因此,无论这两个值如何设置,表中的所有行都将被读取。

同时需要注意的是,尽量不要创建太多分区,否则很容易将mysql搞挂。

关于具体的分区,我写了个示例代码,参考如下(本部分代码参考spark源码org.apache.spark.sql.execution.datasources.jdbc中columnPartition方法 )。

代码如下:

代码执行结果如下:

Original: https://www.cnblogs.com/itboys/p/13043286.html
Author: 大葱拌豆腐
Title: spark sql通过jdbc读取mysql时划分分区问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8814/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总