在我的spark应用程序中,我使用以下代码使用JDBC驱动程序从sql server数据库中检索数据。
Dataset<Row> dfResult= sparksession.read().jdbc("jdbc:sqlserver://server\dbname", tableName,partitionColumn, lowerBound, upperBound, numberOfPartitions, properties);
并在dfResult数据集上使用map操作。
在独立模式下运行应用程序时,我看到spark为每个rdd创建了唯一的连接。从Api描述中,我理解spark负责关闭连接。
我是否知道是否有办法重用连接而不是为每个rdd分区打开和关闭jdbc连接?
由于
答案 0 :(得分:3)
即使您通过API手动将数据推送到数据库中,我也经常看到建议,即每个分区创建一个连接。
# pseudo-code
rdd.foreachPartition(iterator =>
connection = SomeAPI.connect()
for i in iterator:
connection.insert(i)
)
所以,如果jdbc对象已经这样做了,那么必须确认模式应该是这样的。
以下是推荐使用此模式的另一个示例:
我认为这是推荐模式的原因是因为当您在多节点集群中工作时,您永远不知道将在哪个节点上评估特定分区,因此,您需要确保它有一个DB连接。