Spark采用分区方式读取数据库时partitionColumn, lowerBound, upperBound, numPartitions的理解与验证

关键概念

  • partitionColumn:分区字段,需要是数值类的(partitionColumn must be a numeric column from the table in question.),经测试,除整型外,float、double、decimal都是可以的
  • lowerBound:下界,必须为整数
  • upperBound:上界,必须为整数
  • numPartitions:最大分区数量,必须为整数,当为0或负整数时,实际的分区数为1;并不一定是最终的分区数量,例如“upperBound - lowerBound< numPartitions”时,实际的分区数量是“upperBound - lowerBound”;
  • 在分区结果中,分区是连续的,虽然查看每条记录的分区,不是顺序的,但是将rdd保存为文件后,可以看出是顺序的。

验证

数据准备

在Mysql中创建表partition并插入数据,如下所示(两个字段都为int):

在spark-shell中进行相关概念验证

1.    启动spark-shell
2.    在spark-shell中读取准备的mysql中的数据

scala> val jdbcDF = spark.read.format("jdbc").options(Map("url" ->  "jdbc:mysql://172.20.20.11:3306/testdepdb?user=testdep&password=testzet2018","dbtable" -> "testdepdb.partition","fetchSize" -> "20","partitionColumn" -> "seq", "lowerBound" -> "0", "upperBound" -> "10", "numPartitions" -> "5")).load()

3.    查看分区数

scala> jdbcDF.rdd.getNumPartitions
res6: Int = 5

4.    查看数据

scala> jdbc.show
+---+---------+
|seq|clicksNum|
+---+---------+
|  1|        1|
|  2|        2|
|  3|        3|
|  4|        4|
|  5|        5|
|  6|        6|
|  7|        7|
|  8|        8|
|  9|        9|
| 10|       10|
| 11|       11|
| 12|       12|
+---+---------+

5.    引入所需的库

import org.apache.spark.TaskContext

6.    打印每一行的partitionID

jdbcDF.foreach(row => {
      println("partitionId:" + TaskContext.get.partitionId)
    })

partitionId:3
partitionId:3
partitionId:4
partitionId:4
partitionId:4
partitionId:4
partitionId:4
partitionId:2
partitionId:2
partitionId:0
partitionId:1
partitionId:1

 

7. 保存为文件

scala> jdbcDF.rdd.saveAsTextFile("file///tmp/test/partition")

8. 查看文件内容

[root@dmztdep21 partition]# ls
part-00000  part-00001  part-00002  part-00003  part-00004  _SUCCESS
[root@dmztdep21 partition]# cat part-00000
[1,1]
[root@dmztdep21 partition]# cat part-00001
[2,2]
[3,3]
[root@dmztdep21 partition]# cat part-00002
[4,4]
[5,5]
[root@dmztdep21 partition]# cat part-00003
[6,6]
[7,7]
[root@dmztdep21 partition]# cat part-00004
[8,8]
[9,9]
[10,10]
[11,11]
[12,12]

参考

相关博客:

https://blog.csdn.net/wind520/article/details/52327942

https://stackoverflow.com/questions/41085238/whats-meaning-of-partitioncolumn-lowerbound-upperbound-numpartitions-paramete

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汀桦坞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值