其他让 spark 分区读取 jdbc 的方法

Posted

技术标签:

【中文标题】其他让 spark 分区读取 jdbc 的方法【英文标题】:Other ways to make spark read jdbc partitionly 【发布时间】:2018-03-05 09:28:09 【问题描述】:

使用spark sql读取jdbc数据时,spark默认只启动1个分区。但是当 table 太大时,spark 会读取很慢。 我知道有两种方法可以进行分区: 1.在option中设置partitionColumn,lowerBound,upperBound和numPartitions; 2. 在选项中设置一个偏移量数组; 但我的情况是: 我的 jdbc 表没有 INT 列或字符串列可以很容易地通过这两种方式的偏移量分隔。 在我的情况下,这两种方法都行不通,还有其他方法可以分区管理 spark 读取 jdbc 数据吗?

【问题讨论】:

一定有可以分区的东西。整个 MapReduce 范式和并行处理依赖于数据分区以执行并行操作。那么您是否愿意提供有关您的数据的更多信息,以便我们尝试提供帮助?照原样,您的问题无法挽救,可能会被关闭。 @eliasah 我将图像链接添加到 jdbc 表的快照中,我在 db 中有 10 多个表,并且列不一样... 我想你有一个有限数量的包名用于该表,例如。这是您的分区。 @eliasah 谢谢!但你能给我举个例子吗?分区是否应该是一个偏移范围?如何用特定的字符串进行分区? 正如@eliasah 已经提到的,您的表应该有一个唯一的键,否则您将无法利用火花功能。 Spark 需要该列来为分区创建哈希键。如果您确实没有任何东西,但您可以使用 fetchsize 属性。最后,它可以帮助发布您的表架构 【参考方案1】:

看看this question...解决方案是使用数据库中的伪随机列,并根据您要读取的行数进行分区。

Spark JDBC pseudocolumn isn't workingenter link description here

【讨论】:

以上是关于其他让 spark 分区读取 jdbc 的方法的主要内容,如果未能解决你的问题,请参考以下文章

Spark JDBC 读取仅在一个分区中结束

Spark读取JDBC调优

Spark SQL for JDBC 从其他数据库获取数据

第八篇|Spark SQL百万级数据批量读写入MySQL

如何使用 JDBC 在 Spark 中的其他数据库中获取表的创建语句

Spark Streaming - 从Kafka读取json并将json写入其他Kafka主题