【发布时间】:2018-05-17 13:34:59
【问题描述】:
我想使用 Spark 的 JDBC API 从数据库中读取数据。我将使用 200 个执行程序来读取数据。
我的问题是,如果我提供了 200 个执行程序,那么它会创建 200 个与集中式数据库(JDBC)的连接,还是会通过单个连接从驱动程序中获取数据?
【问题讨论】:
标签: apache-spark jdbc
我想使用 Spark 的 JDBC API 从数据库中读取数据。我将使用 200 个执行程序来读取数据。
我的问题是,如果我提供了 200 个执行程序,那么它会创建 200 个与集中式数据库(JDBC)的连接,还是会通过单个连接从驱动程序中获取数据?
【问题讨论】:
标签: apache-spark jdbc
当您建立连接spark.read.jdbc... 时,您可以指定numPartitions 参数。这管理了可以创建多少并行连接的最大限制。
可用于表读写并行的最大分区数。这也决定了最大数量 并发 JDBC 连接数。如果要写入的分区数 超过这个限制,我们通过调用将它减少到这个限制 写之前合并(numPartitions)。
但是,默认情况下,您将数据读取到单个分区,这通常不会充分利用您的 SQL 数据库。
【讨论】:
numPartitions 无效。它仅在与其他属性结合使用时使用。
numPartitions 指定为DataFrameWriter 的选项(如dataset.write().option("numPartitions", 50)),而不是DataFrameReader。然后它将通过“coalesce”操作限制用于写入的连接数。