Joe*_*jr2 6 partitioning jdbc apache-spark apache-spark-sql
我是 Spark 的新手,正在通过 JDBC 从 Postgres 数据库表创建一个 DataFrame,使用spark.read.jdbc.
我对分区选项有些困惑,特别是partitionColumn、lowerBound、upperBound和numPartitions。
假设我将有 20 个执行程序,所以我将 numPartitions 设置为 20。
我的 partitionColumn 是一个自动递增的 ID 字段,假设值范围从 1 到 2,000,000
但是,因为用户选择处理一些非常旧的数据,连同一些真正的新数据,中间没有任何内容,大多数数据的 ID 值要么低于 100,000,要么超过 1,900,000。
我的第 1 位和第 20 位执行者会得到大部分工作,而其他 18 位执行者则大部分时间都坐在那里闲置吗?
如果是这样,有没有办法防止这种情况?
我找到了一种手动指定分区边界的方法,即使用带有谓词参数的 jdbc 构造函数。
它允许您显式指定要插入每个分区的“where”子句中的各个条件,从而允许您准确指定每个分区将接收的行范围。因此,如果您没有用于自动分区的均匀分布列,您可以自定义自己的分区策略。
有关如何使用它的示例可以在该问题的已接受答案中找到。
| 归档时间: |
|
| 查看次数: |
5033 次 |
| 最近记录: |