【问题标题】:Facing Issue in writing PySpark Dataframe to Azure Synapse将 PySpark Dataframe 写入 Azure Synapse 时面临的问题
【发布时间】:2020-10-23 08:02:41
【问题描述】:

我在 Azure Databricks 中有一个 PySpark 数据框。我想写入 Azure Synapse。但我遇到了错误。

com.microsoft.sqlserver.jdbc.SQLServerException: The statement failed. Column 'ETL_TableName' has a data type that cannot participate in a columnstore index. 

我检查了 Synapse 的连接。一切正常,我能够读取数据。但是在写作时,我遇到了问题。任何人都可以帮助如何处理这个错误。

将数据写入 Synapse 的代码:

dataFrame.repartition(1).write.format("jdbc")\
         .option("url", azureurl)\
         .option("tempDir", tempDir) \
         .option("forwardSparkAzureStorageCredentials", "true") \
         .option("dbTable", dbTable)\
         .option("append", "true")\
         .save()

【问题讨论】:

    标签: azure pyspark databricks azure-databricks azure-synapse


    【解决方案1】:

    有几件事需要改变。

    格式应该是.format("jdbc") => .format("com.databricks.spark.sqldw")

    将此选项“tableOptions”子句添加到您的写入语句中。它取代了 CREATE TABLE (AS) 语句的 with() 子句:

    .option ("tableOptions","heap,distribution=MY_DISTRIBUTION")

    代码应如下所示:

    dataFrame.repartition(1).write.format("com.databricks.spark.sqldw")\
             .option("tableOptions","heap,distribution=HASH(rownum)")
             .option("url", azureurl)\
             .option("tempDir", tempDir) \
             .option("forwardSparkAzureStorageCredentials", "true") \
             .option("dbTable", dbTable)\
             .option("append", "true")\
             .save()
    

    参考:

    Azure Databricks - Azure Synapse Analytics

    根据以下指导为 MY_DISTRIBUTION 选择一个值:

    Guidance for designing distributed tables in Synapse SQL pool

    【讨论】:

    • 嗨,Pradeep。感谢您的回复......但不幸的是,这两个建议都对我不起作用。对于第一个建议,当我们将格式从 jdbc 更改为 databricks.spark 时,它甚至没有连接到 db 。所以我们不得不恢复。第二个建议如何在我的情况下为 MY_DISTRIBUTION 实现价值。
    • 这不是上述问题的确切答案。但这可能对某人有所帮助。“我们仍然不知道上述问题。但是我注意到当我们尝试写入 Azure Synapse Warehouse 时会出现此问题。
    • 由于我没有任何严格的理由坚持使用 Synapse Warehouse,而且我的首要任务是以结构化格式从 Databricks 将数据写入 Azure,因此我将 Azure Synapse 仓库替换为 Azure SQL Server 数据库
    • 而且它工作得更好。一旦我找到问题背后的实际原因,我会更新答案。
    • 很高兴知道您能够解决问题。请务必分享解决方案,这可能对阅读此主题的其他社区成员有所帮助。
    【解决方案2】:

    这不是上述问题的确切答案。但它可能会帮助某人克服。 “我仍然不知道上述问题背后的原因”。但我注意到在尝试写入 Azure Synapse Warehouse 时会出现此问题。由于我没有任何严格的理由坚持使用 Synapse Warehouse,并且整个优先事项是以结构化格式将 Databricks 中的数据写入 Azure,因此我将 Azure Synapse 仓库替换为 Azure SQL Server 数据库。它的工作效果要好得多。将更新答案一旦我找到了问题背后的真正原因。

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2023-02-23
      • 2022-01-16
      • 2020-11-02
      • 2019-01-16
      • 2020-05-20
      相关资源
      最近更新 更多