我想每天使用PySpark将大约10 GB的数据写入Azure SQL服务器数据库。目前使用JDBC驱动程序需要花费数小时才能一步一步地插入插入语句。
我正计划使用azure-sqldb-spark连接器,该连接器声称可以使用批量插入来加快写入速度。
我查看了官方文档:https://github.com/Azure/azure-sqldb-spark。 该库是用scala编写的,基本上需要使用2个scala类:
import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._
val bulkCopyConfig = Config(Map(
"url" -> "mysqlserver.database.windows.net",
"databaseName" -> "MyDatabase",
"user" -> "username",
"password" -> "*********",
"databaseName" -> "MyDatabase",
"dbTable" -> "dbo.Clients",
"bulkCopyBatchSize" -> "2500",
"bulkCopyTableLock" -> "true",
"bulkCopyTimeout" -> "600"
))
df.bulkCopyToSqlDB(bulkCopyConfig)
是否可以像这样(使用sc._jvm)在pyspark中实现:
Config = sc._jvm.com.microsoft.azure.sqldb.spark.config.Config
connect= sc._jvm.com.microsoft.azure.sqldb.spark.connect._
//all config
df.connect.bulkCopyToSqlDB(bulkCopyConfig)
我不是Python专家。有人可以帮我完成整个代码片段吗?
答案 0 :(得分:2)
Spark连接器当前(截至2019年3月)仅支持Scala API(如here所述)。 因此,如果您在笔记本上工作,则可以使用python进行所有预处理,最后将数据帧注册为临时表,例如。 G。 :
df.createOrReplaceTempView('testbulk')
,并且必须在Scala中做最后一步:
%scala
//configs...
spark.table("testbulk").bulkCopyToSqlDB(bulkCopyConfig)