我不知道在下面的场景中,spark会与数据库建立多少连接:假设我有一个spark程序,它只在一个有一个执行器的工作节点上运行,一个Dataframe中的分区数是10。我想把这个Dataframe写入teradata。由于并行级别是10,但执行器只有1,所以在保存数据时会有10个连接,还是只有1个连接?
gstyhher1#
这取决于您的spark->teradata解决方案。一般来说,每个核心有一个连接。每个核心对自己的分区进行1乘1的迭代。例如,如果您使用 .foreach 使用自定义解决方案,一行中一次将有一个连接。如果你使用 foreachPartition 使用自定义解决方案,您将有一个多行连接。
.foreach
foreachPartition
olqngx592#
自spark 2.2以来 numPartitions 为jdbc数据源指定的参数还用于控制其写入行为(除了前面设置读取期间的并行级别的目的之外)。来自spark docs:numpartitions公司表读写中可用于并行的最大分区数。这也决定了并发jdbc连接的最大数量。如果要写入的分区数超过此限制,则在写入之前通过调用coalesce(numpartitions)将其减少到此限制。
numPartitions
2条答案
按热度按时间gstyhher1#
这取决于您的spark->teradata解决方案。
一般来说,每个核心有一个连接。每个核心对自己的分区进行1乘1的迭代。
例如,如果您使用
.foreach
使用自定义解决方案,一行中一次将有一个连接。如果你使用
foreachPartition
使用自定义解决方案,您将有一个多行连接。olqngx592#
自spark 2.2以来
numPartitions
为jdbc数据源指定的参数还用于控制其写入行为(除了前面设置读取期间的并行级别的目的之外)。来自spark docs:numpartitions公司
表读写中可用于并行的最大分区数。这也决定了并发jdbc连接的最大数量。如果要写入的分区数超过此限制,则在写入之前通过调用coalesce(numpartitions)将其减少到此限制。