【发布时间】:2022-01-03 06:13:47
【问题描述】:
我想知道batchsize 选项对使用spark jdbc 的插入操作有什么影响。这是否意味着使用类似于大容量插入的一个插入命令进行大容量插入,还是最终提交的一批插入命令?
由于文档中没有明确提及,有人可以澄清一下吗?
【问题讨论】:
我想知道batchsize 选项对使用spark jdbc 的插入操作有什么影响。这是否意味着使用类似于大容量插入的一个插入命令进行大容量插入,还是最终提交的一批插入命令?
由于文档中没有明确提及,有人可以澄清一下吗?
【问题讨论】:
根据source code,选项batchsize用于PreparedStatement的executeBatch方法,可以将一批命令提交到数据库执行。
关键代码:
val stmt = conn.prepareStatement(insertStmt)
while (iterator.hasNext) {
stmt.addBatch()
rowCount += 1
if (rowCount % batchSize == 0) {
stmt.executeBatch()
rowCount = 0
}
}
if (rowCount > 0) {
stmt.executeBatch()
}
回到你的问题,确实有
一批插入命令
但是,gets committed at the end 语句是错误的,因为只有部分插入成功执行是可以的。这里没有额外的交易要求。顺便说一句,如果没有指定,Spark 将采用默认的隔离级别。
【讨论】: