从 Azure Synapse 中的 Apache Spark 将数据写入 SQL DW

Write Data to SQL DW from Apache Spark in Azure Synapse

当我从 Databricks 将数据写入 Azure 中的 SQL DW 时,我使用以下代码:

example1.write.format("com.databricks.spark.sqldw").option("url", sqlDwUrlSmall).option("dbtable", "SampleTable12").option("forward_spark_azure_storage_credentials","True") .option("tempdir", tempDir).mode("overwrite").save()

这不适用于 Synapse Notebook 中的 Notebook。我收到错误:

Py4JJavaError: An error occurred while calling o174.save.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.sqldw. Please find packages at http://spark.apache.org/third-party-projects.html
    at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:656) Caused by: java.lang.ClassNotFoundException: com.databricks.spark.sqldw.DefaultSource

基本上,我需要知道 Azure Synapse 中 Apache Spark 的等价物 com.databricks.spark.sqldw

谢谢

如果您要写入与笔记本相同的 Synapse 工作区内的专用 SQL 池,那么它就像调用 synapsesql 方法一样简单。 Scala 中的一个简单参数化示例,使用 Synapse 笔记本的参数单元格功能。

// Read the table
val df = spark.read.synapsesql(s"${pDatabaseName}.${pSchemaName}.${pTableName}")

// do some processing ...

// Write it back with _processed suffixed to the table name
df.write.synapsesql(s"${pDatabaseName}.${pSchemaName}.${pTableName}_processed", Constants.INTERNAL)

如果您尝试从您的笔记本写入不同的专用 SQL 池或旧的 Azure SQL 数据仓库,那么它有点不同,但有一些很好的例子 here .

更新:带美元符号的大括号中的项目(例如${pDatabaseName})是参数。您可以在笔记本中指定一个参数单元格,这样参数就可以从外部传入,例如使用执行笔记本 activity 从 Azure 数据工厂 (ADF) 或 Synapse Pipelines 传入,并在笔记本中重复使用,如我上面的示例所示。了解有关 Synapse Notebook 参数的更多信息 here