如何在pyspark中使用azure-sqldb-spark连接器

时间:2018-10-27 07:10:56

标签: azure apache-spark pyspark spark-jdbc

我想每天使用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专家。有人可以帮我完成整个代码片段吗?

1 个答案:

答案 0 :(得分:2)

Spark连接器当前(截至2019年3月)仅支持Scala API(如here所述)。 因此,如果您在笔记本上工作,则可以使用python进行所有预处理,最后将数据帧注册为临时表,例如。 G。 :

df.createOrReplaceTempView('testbulk')

,并且必须在Scala中做最后一步:

%scala
//configs...
spark.table("testbulk").bulkCopyToSqlDB(bulkCopyConfig)