将简单的 synapsesql 实现从 Spark 2.4.8 迁移到 Spark 3.1.2 时需要进行哪些更改?

What changes are required when moving simple synapsesql implementation from Spark 2.4.8 to Spark 3.1.2?

我有一个简单的 .write.synapsesql() 方法实现(代码如下所示),它在 Spark 2.4.8 中有效,但在 Spark 3.1.2 (documentation/example here) 中无效。使用的数据是一个简单的笔记本创建的 foobar 类型 table。在网上搜索有关错误的关键短语并没有为我提供任何新信息。 3.1.2错误的原因是什么?

Spark 2.4.8 版本(按预期运行):

val df = spark.sql("SELECT * FROM TEST_TABLE")
df.write.synapsesql("my_local_db_name.schema_name.test_table", Constants.INTERNAL, None)

Spark 3.1.2版本(额外方法同文档,也可以省略,结果类似):

val df = spark.sql("SELECT * FROM TEST_TABLE")
df.write.synapsesql("my_local_db_name.schema_name.test_table", Constants.INTERNAL, None, 
                     Some(callBackFunctionToReceivePostWriteMetrics))

产生的错误(仅在 3.1.2 中)是:

WriteFailureCause -> java.lang.IllegalArgumentException: Failed to derive `https` scheme based staging location URL for SQL COPY-INTO}

正如问题中的文档所述,请确保您使用

正确设置了选项
val writeOptionsWithAADAuth:Map[String, String] = Map(Constants.SERVER -> "<dedicated-pool-sql-server-name>.sql.azuresynapse.net",
                                            Constants.TEMP_FOLDER -> "abfss://<storage_container_name>@<storage_account_name>.dfs.core.windows.net/<some_temp_folder>")

并在您的 .write 语句中包含选项,如下所示:

df.write.options(writeOptionsWithAADAuth).synapsesql(...)