我正在使用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
}
}
})
}
}