pyspark strict_append在@incremental中是如何工作的?

xqkwcwgp  于 2023-04-29  发布在  Spark
关注(0)|答案(2)|浏览(229)

我试图理解@incremental装饰器中strict_append=Falsestrict_append=True之间的区别。
我看了视频:https://www.youtube.com/watch?v=R8LVvy4v7Es并尝试了不同的组合(上传不同的文件,更新记录等),但仍然不明白什么是strict_append=True的情况。

wj8zmpe1

wj8zmpe11#

我以前从来没有使用过strict_append,所以我通过阅读代码来回答。您还应该能够在函数上看到ctrl + click(或cmd + click)的代码。它包含一些pydoc,其中说:

**strict_append(bool,optional):**如果为True,则底层代工事务类型为APPEND。请注意,写入操作可能不会覆盖任何文件,甚至包括Parquet摘要元数据或Hadoop SUCCESS文件等辅助文件。所有Foundry格式的增量写入都应支持此模式。

它似乎是在版本1中添加的。312.0
这是我在代码库中看到的:

  1. # The mode for an incremental write is either 'append' or 'modify', according to the `strict_append` parameter
  2. mode = 'replace'
  3. if is_incremental:
  4. mode = 'append' if self._strict_append else 'modify'

稍后使用mode示例化事务类型。给定上面的if条件,看起来如果strict_append为true,您将始终获得一个append事务,因此您不会替换或修改当前文件内容。

jtjikinw

jtjikinw2#

strict_append似乎确保您获得APPEND事务,而Foundry将使用UPDATE事务。
根据Foundry文档,Foundry将决定使用APPEND事务来直接转换输入行。
如果您的PySpark或Pandas转换是一个添加的输出行仅是添加的输入行的函数,根据文档中的append示例,默认模式将产生正确的增量转换。
如果Foundry决定您正在执行UPDATE事务,它可能会意外地重新生成整个数据集。
如果您不转换some_input.dataframe(),而是使用some_input.filesystem()自己处理添加的文件,则可能会发生这种情况。

相关问题