首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySpark JDBC写入MySQL (TiDB)

PySpark JDBC写入MySQL (TiDB)
EN

Stack Overflow用户
提问于 2019-12-29 15:17:25
回答 2查看 777关注 0票数 0

我正试图给TIDB (Spark2.3)写一条电火花数据(百万行)。

代码语言:javascript
复制
df.write.format('jdbc').options(
  url='jdbc:mysql://<host>:<port>/<table>',
  driver='com.mysql.jdbc.Driver',
  dbtable='<tablename>',
  user='<username>',
  password='<password>',
  batchsize = 30000,
  truncate = True
).mode('overwrite').save()

然而,我一直得到的就是这个错误

代码语言:javascript
复制
Caused by: java.sql.BatchUpdateException: statement count 5001 exceeds the transaction limitation, autocommit = false
....
....
....
Caused by: java.sql.SQLException: statement count 5001 exceeds the transaction limitation, autocommit = false

知道我该怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-29 17:02:58

应该将?rewriteBatchedStatements=true添加到JDBC中,以便批处理DML语句。不仅写入速度会更快,而且不会那么容易地达到数据库事务限制。

票数 2
EN

Stack Overflow用户

发布于 2021-12-15 12:07:31

您可以尝试添加选项,将"isolationLevel“设置为”无“,这将避免事务的限制。

代码语言:javascript
复制
df.write.format('jdbc').options(
  url='jdbc:mysql://<host>:<port>/<table>',
  driver='com.mysql.jdbc.Driver',
  dbtable='<tablename>',
  user='<username>',
  password='<password>',
  batchsize = 30000,
  truncate = True,
  isolationLevel = None
).mode('overwrite').save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59520631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档