最近公司用到了spark读写doris,因为doris其实就是mysql协议,在读取数据时候速度还是可以的,但是写入时候就发生了数据写入特别慢,几千条的数据甚至要用几十分钟,这不是可以接受的。
经过调研查询发现因为连接参数没有指定,数据都是单条写入,改造前写入方式:
userLogDF
.write
.format("jdbc")
.mode(SaveMode.Append)
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://${host}:${port}")
.option("batchsize", "50000")
.option("user", "root")
.option("password", "bigdata1234")
.option("isolationLevel", "NONE")
.option("dbtable","dev_dwd.dwd_user_act" )
.save()
而需要增加的参数就是在URL后增加,单表重复批量写入,而不是单条的循环写入
rewriteBatchedStatements=true
改造后:
userLogDF
.write
.format("jdbc")
.mode(SaveMode.Append)
.option("driver", "com.mysql.jdbc.Driver")
.option("url", "jdbc:mysql://${host}:${port}/dev_dwd?rewriteBatchedStatements=true")
.option("batchsize", "50000")
.option("user", "root")
.option("password", "bigdata1234")
.option("isolationLevel", "NONE")
.option("dbtable","dev_dwd.dwd_user_act" )
.save()
写入速度又原先的几十分钟变为了几十秒。