我们求助于使用azure-sqldb-spark库,而不是使用Spark的默认内置导出功能。这个库给你一个
bulkCopyToSqlDB这是一个方法 真正的 批量插入,去 了很多
更快。它比内置功能使用起来不太实用,但是以我的经验,还是值得的。
我们或多或少地像这样使用它:
import com.microsoft.azure.sqldb.spark.config.Configimport com.microsoft.azure.sqldb.spark.connect._import com.microsoft.azure.sqldb.spark.query._val options = Map( "url" -> "***", "databaseName" -> "***", "user" -> "***", "password" -> "***", "driver" -> "com.microsoft.sqlserver.jdbc.SQLServerDriver")// first make sure the table exists, with the correct column types// and is properly cleaned up if necessaryval query = dropAndCreateQuery(df, "myTable")val createConfig = Config(options ++ Map("QueryCustom" -> query))spark.sqlContext.sqlDBQuery(createConfig)val bulkConfig = Config(options ++ Map( "dbTable"-> "myTable", "bulkCopyBatchSize" -> "20000", "bulkCopyTableLock" -> "true", "bulkCopyTimeout" -> "600"))df.bulkCopyToSqlDB(bulkConfig)如您所见,我们
CREATE TABLE自己生成查询。您 可以
让该库创建表,但是这样做
dataframe.limit(0).write.sqlDB(config)仍然会非常低效,可能需要您缓存您的
Dataframe,并且不允许您选择
SaveMode。
也可能很有趣:
ExclusionRule在将此库添加到sbt构建中时,我们必须使用an ,否则
assembly任务将失败。
libraryDependencies += "com.microsoft.azure" % "azure-sqldb-spark" % "1.0.2" excludeAll( ExclusionRule(organization = "org.apache.spark"))



