用spark将数据插入oracle

时间:2018-02-22 06:23:24

标签: apache-spark

我正在使用spark将数据插入oracle,但我遇到了一个问题:

在parellel中有几个任务/分区将数据写入oracle,每个任务都有自己的部分:

  • 获取连接
  • 打开交易
  • 插入数据
  • 提交交易
  • 如果任务失败则回滚

如果某些任务成功,一个任务失败,这意味着插入了部分数据,而某些数据则没有。

也就是说,如果任务失败,我想回滚。

以下是示例代码:

object SparkJdbcOracle {
  def main(args: Array[String]) {
    val spark = SparkSession.builder().master("local[4]").appName("SparkJdbcOracle").getOrCreate()
    spark.sparkContext.parallelize(0 until 100, 4).foreachPartition(partitionIterator => {
      val conn = DriverManager.getConnection("jdbc connection")
      try {
        conn.setAutoCommit(false)
        val stmt = conn.createStatement()
        partitionIterator.foreach(i => {
          stmt.addBatch(s"insert into A(id) values ($i)")
        })
        stmt.executeBatch()
        conn.commit()
      } catch {
        case e: Exception => {
          conn.rollback()
          throw e
        }
      }


    })
  }

}

0 个答案:

没有答案