为了提高使用 PY-Spark 的性能(由于管理限制只能使用 python、SQL 和 R),可以使用以下选项。
方法一:使用 JDBC 连接器
此方法逐行读取或写入数据,导致性能问题。 不推荐。
df.write \
.format("jdbc") \
.mode("overwrite or append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.save()
方法 2:使用 Apache Spark 连接器(SQL Server 和 Azure SQL)
此方法使用批量插入来读取/写入数据。还有更多的选择可以进一步探索。
首先在 Data-bricks 集群中使用 Maven Coordinate 安装库,然后使用以下代码。
推荐用于 Azure SQL DB 或 Sql Server 实例
https://docs.microsoft.com/en-us/sql/connect/spark/connector?view=sql-server-ver15
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite or append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.option("batchsize", as per need) \
.option("mssqlIsolationLevel", "READ_UNCOMMITTED")\
.save()
方法 3:使用 Azure 专用 SQL 池的连接器(以前称为 SQL DW)
此方法以前使用 Poly-base 使用暂存服务器(主要是 Blob 存储或 Data Lake 存储目录)从 Azure Synapse 读取和写入数据,但现在正在读取数据并使用 Copy 进行写入,因为 Copy 方法提高了性能。
推荐用于 Azure Synapse
https://docs.databricks.com/data/data-sources/azure/synapse-analytics.html
df.write \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.option("tempDir", "wasbs://<your-container-name>@<your-storage-account-name>.blob.core.windows.net/<your-directory-name>") \
.save()