带有 JDBC 连接的 SparkSql [重复]

Posted

技术标签:

【中文标题】带有 JDBC 连接的 SparkSql [重复]【英文标题】:SparkSql with JDBC Connection [duplicate] 【发布时间】:2018-05-17 13:34:59 【问题描述】:

我想使用 Spark 的 JDBC API 从数据库中读取数据。我将使用 200 个执行程序来读取数据。

我的问题是,如果我提供了 200 个执行程序,那么它会创建 200 个与集中式数据库(JDBC)的连接,还是会通过单个连接从驱动程序中获取数据?

【问题讨论】:

【参考方案1】:

当您建立连接spark.read.jdbc... 时,您可以指定numPartitions 参数。这管理了可以创建多少并行连接的最大限制。

可用于表读写并行的最大分区数。这也决定了最大数量 并发 JDBC 连接数。如果要写入的分区数 超过这个限制,我们通过调用将它减少到这个限制 写之前合并(numPartitions)。

但是,默认情况下,您将数据读取到单个分区,这通常不会充分利用您的 SQL 数据库。

【讨论】:

隔离numPartitions 无效。它仅在与其他属性结合使用时使用。 @user8371915 当然,但是这个参数控制并行度。 当且仅当它与边界和分区列组合并且未提供谓词参数。否则会被忽略 它适用于限制用于写入的连接数。然后必须将numPartitions 指定为DataFrameWriter 的选项(如dataset.write().option("numPartitions", 50)),而不是DataFrameReader。然后它将通过“coalesce”操作限制用于写入的连接数。

以上是关于带有 JDBC 连接的 SparkSql [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法从 sparksql 连接配置单元元存储 [重复]

带有连接表的双向@ManyToOne 创建重复键

在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”

SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表

SparkSQL使用Python从MySQL数据库表中读取[重复]

SparkSQL:jdbc 数据源是不是有“filterPushdown”功能