PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?

Posted

技术标签:

【中文标题】PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?【英文标题】:PySpark save to Redshift table with "Overwirte" mode results in dropping table? 【发布时间】:2018-05-21 05:50:10 【问题描述】:

在 AWS Glue 中使用 PySpark 将数据从 S3 文件加载到 Redshift 表中,在代码使用模式(“Overwirte”)中出现错误,指出“无法删除表,因为其他对象依赖于表”,结果是在该表之上创建的视图,接缝“覆盖”模式实际上删除并重新创建红移表然后加载数据,是否有任何选项只能“截断”表而不删除它?

【问题讨论】:

【参考方案1】:

AWS Glue 使用databricks spark redshift connector(它没有在任何地方记录,但我凭经验验证了这一点)。 Spark redshift 连接器的文档提到:

覆盖现有表:默认情况下,此库使用事务来执行覆盖,通过删除目标表、创建新的空表并向其追加行来实现。

【讨论】:

【参考方案2】:

这里有一个与您的问题相关的讨论,他们使用截断而不是覆盖,也是 lambda 和胶水的组合。详细讨论和代码示例请参考here。希望这会有所帮助。

问候

【讨论】:

该线程谈到使用两个作业首先截断 Redshift 表并运行 AWS Glue 作业来加载数据。我正在尝试在一项 Glue 作业中找到一种方法来实现这一点,即插入连接到 Redshift db 并截断目标表然后加载数据的代码,这可能吗?有示例代码吗?

以上是关于PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?的主要内容,如果未能解决你的问题,请参考以下文章

使用pyspark分区时循环覆盖模式

如何从 Databrick/PySpark 覆盖/更新 Azure Cosmos DB 中的集合

Pyspark 写入数据帧并将其保存到 csv 文件中会出现错误

如何删除或覆盖添加到 pyspark 作业的文件?

如何使用pyspark将数据框保存在“.txt”文件中

找不到pyspark数据框保存到配置单元表