我正在使用下面的代码将一个包含 43 列和大约 2,000,000 行的 DataFrame 写入 SQL Server 中的一个表中:
dataFrame
.write
.format("jdbc")
.mode("overwrite")
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
.option("url", url)
.option("dbtable", tablename)
.option("user", user)
.option("password", password)
.save()
遗憾的是,虽然它确实适用于小型数据帧,但它要么非常慢,要么对于大型数据帧超时。关于如何优化它的任何提示?
我试过设置 rewriteBatchedStatements=true
谢谢。
最佳答案
尝试将 batchsize
选项添加到至少 > 10000
的语句中(相应地更改此值以获得更好的性能)并再次执行写入.
The JDBC batch size, which determines how many rows to insert per round trip. This can help performance on JDBC drivers. This option applies only to writing. It defaults to 1000.
也值得一试:
numPartitions
option
增加并行度(这也决定了JDBC最大并发连接数)queryTimeout
option
增加写入选项的超时时间。
关于sql - Spark : optimise writing a DataFrame to SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708079/