带有 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”
SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表