pySpark无法执行保存操作,因为select正在锁定表

2024-06-16 17:56:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有一个非常频繁的选择表,当我们试图用override选项保存数据帧时,我们会得到如下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o364.save.
: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2730)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1618)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1549)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.truncateTable(JdbcUtils.scala:113)
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:56)
at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68)

我确信这个问题与wating_timeoutinterative_timeout无关。但不幸的是,有很多事情会导致这个问题。问题是,当我们试图截断该表时,有一些select查询正在锁定该表

目前,可以通过手动从DB中删除会话来修复,但这不是我想要的解决方案。也许有人知道我能做些什么来避免这种情况


Tags: orgcomsqlapachemysqltimeoutjavaat
1条回答
网友
1楼 · 发布于 2024-06-16 17:56:08

经过调查,我发现这个问题本身非常愚蠢,所以有时我们同时使用TRUNCATE进行SELECT查询,然后两个查询都使用wait metadata lock语句进行叠加。这种情况下的超时默认设置为50秒

相关问题 更多 >