【问题标题】:Spark JDBC "batch size" effect on insertSpark JDBC“批量大小”对插入的影响
【发布时间】:2022-01-03 06:13:47
【问题描述】:

我想知道batchsize 选项对使用spark jdbc 的插入操作有什么影响。这是否意味着使用类似于大容量插入的一个插入命令进行大容量插入,还是最终提交的一批插入命令?

由于文档中没有明确提及,有人可以澄清一下吗?

【问题讨论】:

    标签: apache-spark spark-jdbc


    【解决方案1】:

    根据source code,选项batchsize用于PreparedStatementexecuteBatch方法,可以将一批命令提交到数据库执行。

    关键代码:

    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 将采用默认的隔离级别。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2022-01-17
      • 1970-01-01
      • 2015-02-06
      • 2011-01-14
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多