Java Spark jdbc重用连接

Java Spark jdbc重用连接,java,jdbc,apache-spark,Java,Jdbc,Apache Spark,在spark应用程序中,我使用以下代码使用JDBC驱动程序从sql server数据库检索数据 Dataset<Row> dfResult= sparksession.read().jdbc("jdbc:sqlserver://server\dbname", tableName,partitionColumn, lowerBound, upperBound, numberOfPartitions, properties); Dataset dfResult=sparksessio

在spark应用程序中,我使用以下代码使用JDBC驱动程序从sql server数据库检索数据

 Dataset<Row> dfResult= sparksession.read().jdbc("jdbc:sqlserver://server\dbname", tableName,partitionColumn, lowerBound, upperBound, numberOfPartitions, properties);
Dataset dfResult=sparksession.read().jdbc(“jdbc:sqlserver://server\dbname”,tableName,partitionColumn,lowerBound,upperBound,numberOfPartitions,properties);
并在dfResult数据集上使用映射操作

在独立模式下运行应用程序时,我看到spark为每个rdd创建了唯一的连接。从Api描述中,我了解spark负责关闭连接

我可以知道是否有一种方法可以重用连接,而不是打开和关闭每个rdd分区的jdbc连接吗


谢谢

即使您通过API将数据手动推入数据库,我也经常看到建议您为每个分区创建一个连接

# pseudo-code
rdd.foreachPartition(iterator =>
  connection = SomeAPI.connect()
  for i in iterator:
    connection.insert(i)
)
因此,如果jdbc对象已经这样做了,那么必须确认模式应该是这样的

下面是推荐的这种模式的另一个示例:

幻灯片27


我认为这是推荐模式的原因是,当您在多节点集群中工作时,您永远不知道某个特定分区将在哪个节点上求值,因此,您希望确保该分区有一个DB连接。

我不知道spark,但是,您可能需要检查是否可以使用
javax.sql.DataSource
,并提供一个连接池。谢谢您的回复。但我的用例是从数据库读取数据并使用数据帧加载操作。还有其他建议吗?