Spark JDBC "batch size" 对插入的影响
Spark JDBC "batch size" effect on insert
我想知道 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()
}
回到你的问题,确实有
a batch of insert commands
但是,语句gets committed at the end
是错误的,因为只有部分插入成功执行就可以了。这里没有额外的交易要求。顺便说一句,如果不指定,Spark 将采用默认的隔离级别。
我想知道 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()
}
回到你的问题,确实有
a batch of insert commands
但是,语句gets committed at the end
是错误的,因为只有部分插入成功执行就可以了。这里没有额外的交易要求。顺便说一句,如果不指定,Spark 将采用默认的隔离级别。