1

我很困惑在以下场景中 Spark 会与数据库建立多少连接:

假设我有一个 Spark 程序,它只在一个带有一个执行程序的工作节点上运行,并且数据帧中的分区数为 10。我想将此数据帧写入 Teradata。既然并行度是10,而executor只有1,那么保存数据的时候是10个连接,还是只有1个连接?

4

2 回答 2

1

从 Spark 2.2 开始,numPartitions为 JDBC 数据源指定的参数也用于控制其写入行为(除了之前设置读取期间的并行级别的目的)。来自Spark 文档

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

于 2020-11-04T23:16:56.327 回答
0

这取决于您的 spark -> teradata 解决方案。

一般来说,每个核心将有 1 个连接。每个核心逐个迭代自己的分区。

例如,如果您使用.foreach自定义解决方案,那么您将在 1 行中同时拥有 1 个连接。

如果您使用foreachPartition自定义解决方案,您将有 1 个连接用于多行。

于 2020-11-04T19:55:40.457 回答