在 Azure Databricks 中使用 Python 将 DF 写入 SQL Server

ASH*_*ASH 5 sql-server scala dataframe python-3.x databricks

我们刚刚从 Scala 转向 Python。我有一个数据框需要推送到 SQL Server 中。我之前曾多次使用下面的 Scala 代码执行此操作。

var bulkCopyMetadata = new BulkCopyMetadata
bulkCopyMetadata.addColumnMetadata(1, "Title", java.sql.Types.NVARCHAR, 128, 0)
bulkCopyMetadata.addColumnMetadata(2, "FirstName", java.sql.Types.NVARCHAR, 50, 0)
bulkCopyMetadata.addColumnMetadata(3, "LastName", java.sql.Types.NVARCHAR, 50, 0)

val bulkCopyConfig = Config(Map(
  "url"               -> "mysqlserver.database.windows.net",
  "databaseName"      -> "MyDatabase",
  "user"              -> "username",
  "password"          -> "*********",
  "dbTable"           -> "dbo.Clients",
  "bulkCopyBatchSize" -> "2500",
  "bulkCopyTableLock" -> "true",
  "bulkCopyTimeout"   -> "600"
))

df.bulkCopyToSqlDB(bulkCopyConfig, bulkCopyMetadata)
Run Code Online (Sandbox Code Playgroud)

这已记录在此处。

https://learn.microsoft.com/en-us/azure/sql-database/sql-database-spark-connector

我正在寻找一个等效的 Python 脚本来完成相同的工作。我搜索了同样的内容,但没有找到任何东西。这里有人有可以完成这项工作的东西吗?谢谢。

Pet*_*Pan 4

请尝试参考PySpark官方文档JDBC To Other Databases通过MS SQL Server的jdbc驱动程序直接将PySpark dataframe写入SQL Server。

这是示例代码。

spark_jdbcDF.write
    .format("jdbc")
    .option("url", "jdbc:sqlserver://yourserver.database.windows.net:1433")
    .option("dbtable", "<your table name>")
    .option("user", "username")
    .option("password", "password")
    .save()
Run Code Online (Sandbox Code Playgroud)

或者

jdbcUrl = "jdbc:mysql://{0}:{1}/{2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
  "user" : jdbcUsername,
  "password" : jdbcPassword,
  "driver" : "com.mysql.jdbc.Driver"
}
spark_jdbcDF.write \
    .jdbc(url=jdbcUrl, table="<your table anem>",
          properties=connectionProperties ).save()
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。

  • 我尝试过同样的操作,但收到“AttributeError: 'NoneType' object has no attribute 'save'” 错误 (2认同)