Caused by: java.sql.SQLException: Can‘t call commit when autocommit=true 踩坑

在使用spark将hive中的数据导出到MysqL的时候遇到这个一个错误

Caused by: java.sql.sqlException: Can't call commit when autocommit=true
        at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:934)
        at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:931)
        at com.MysqL.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1646)
        at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:756)
        at com.syswin.d_toon_user_info_new$$anonfun$main$1.apply(xxxx.scala:107)
        at com.syswin.d_toon_user_info_new$$anonfun$main$1.apply(xxxxx.scala:56)
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:928)
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:928)
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2071)
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2071)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
        at org.apache.spark.scheduler.Task.run(Task.scala:109)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:344)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

这个错误的大概意思就是当自动属性值为true是无法call commit。
如果不在代码中指定,conn.setAutoCommit()的值认为true,这就意味着当执行DDL操作时候都会自动提交到数据库,无法回滚事务;当指定conn.setAutoCommit()为false时,意味着只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
两者的主要区别就是当参数为true时sql命令的提交由驱动程序负责,当参数为false时sql命令的提交由由应用程序负责,程序必须调用commit或者rollback方法
所以解决这个问题的方法就是将自动提交改成手动提交即可,也就是令autocommit=false。

相关文章

1.SparkStreaming是什么?SparkStreaming是SparkCore的扩展A...
本篇内容介绍了“Spark通讯录相似度计算怎么实现”的有关知识...
本篇文章给大家分享的是有关如何进行Spark数据分析,小编觉得...
本篇内容主要讲解“Spark Shuffle和Hadoop Shuffle有哪些区别...
这篇文章主要介绍“TSDB的数据怎么利用Hadoop/spark集群做数...
本篇内容介绍了“Hadoop与Spark性能原理是什么”的有关知识,...