![](/img/trans.png)
[英]spark.write.synapsesql options with Azure Synapse Spark Pool
[英]Error when write spark dataframe from Databricks into Azure Synapse
我正在尝试将 spark dataframe 写入 Azure Syanpse 数据库。
我的代码:
try:
re_spdf.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.option("encrypt", 'True') \
.option("trustServerCertificate", 'false') \
.option("hostNameInCertificate", '*.database.windows.net') \
.option("mssqlIsolationLevel", "READ_UNCOMMITTED") \
.option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver')\
.save()
except ValueError as error :
print("Connector write failed", error)
错误信息:
org.apache.spark.SparkException: Job aborted due to stage failure:
Task 1 in stage 29.0 failed 4 times, most recent failure:
Lost task 1.3 in stage 29.0 (TID 885, 10.139.64.8, executor 0):
com.microsoft.sqlserver.jdbc.SQLServerException:
PdwManagedToNativeInteropException ErrorNumber: 46724, MajorCode: 467,
MinorCode: 24, Severity: 20, State: 2, Exception of type
'Microsoft.SqlServer.DataWarehouse.Tds.PdwManagedToNativeInteropException' was thrown.
甚至我用谷歌搜索了这个错误信息。 我没有得到任何有用的解决方案。
更新:我的工作环境是Databricks pyspark笔记本。
任何建议,将不胜感激。
突触数据库表中有一些列长度限制。 它将只允许 4000 个字符。
所以当我使用com.databricks.spark.sqldw
因为它使用Polybase
作为连接器时,我还需要更改数据库表中列的长度。 参考: https://forums.databricks.com/questions/21032/databricks-throwing-error-sql-dw-failed-to-execute.html
代码:
df.write \
.format("com.databricks.spark.sqldw") \
.mode("append") \
.option("url", url) \
.option("user", username) \
.option("password", password) \
.option("maxStrLength", "4000" ) \
.option("tempDir", "tempdirdetails") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("mssqlIsolationLevel", "READ_UNCOMMITTED") \
.option("dbTable", table_name) \
.save()
Azure databricks 文档说格式com.databricks.spark.sqldw
从 Azure Synapse 表读取/写入数据。
如果您使用的是 Synapse,为什么不使用 Synapse 笔记本然后编写 dataframe 就像调用synapsesql
一样简单,例如
%%spark
df.write.synapsesql("yourPool.dbo.someXMLTable_processed", Constants.INTERNAL)
你会为自己省去一些麻烦,而且性能应该很好,因为它是并行的。 这是主要文章:
https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/synapse-spark-sql-pool-import-export
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.