TextIO.Write - 它是追加还是替换输出文件(Google Cloud Dataflow)
TextIO.Write - does it append to or replace the output files (Google Cloud Dataflow)
我找不到关于它的任何文档,所以我想知道如果输出文件已经存在(在 gs:// 存储桶中)会有什么行为?
谢谢,
G
文件将被覆盖。这样做有几个动机:
- "report-like" 用例(计算输入数据的摘要并将结果放在 GCS 上)似乎比增量生成数据并放置更多数据的用例频繁得多每次执行管道时都进入 GCS。
- 如果重新运行管道是幂等的(-ish?),那就太好了。例如。如果您在管道中发现错误,您可以修复它并重新运行它,并享受被覆盖的正确结果。附加到文件的管道在这个问题上很难处理。
- TextIO.Write不需要指定输出分片数量;它在不同的执行之间可能略有不同,即使对于完全相同的管道和相同的输入数据也是如此。在这种情况下追加的语义会非常混乱。
- 据我所知,不可能使用我知道的任何文件系统有效地实施追加,同时保留原子性和容错保证(例如,您生成所有输出或 none ,即使面对由于失败而重新执行的包)。
此行为将记录在 github 上出现的下一版 SDK 中。
我找不到关于它的任何文档,所以我想知道如果输出文件已经存在(在 gs:// 存储桶中)会有什么行为?
谢谢, G
文件将被覆盖。这样做有几个动机:
- "report-like" 用例(计算输入数据的摘要并将结果放在 GCS 上)似乎比增量生成数据并放置更多数据的用例频繁得多每次执行管道时都进入 GCS。
- 如果重新运行管道是幂等的(-ish?),那就太好了。例如。如果您在管道中发现错误,您可以修复它并重新运行它,并享受被覆盖的正确结果。附加到文件的管道在这个问题上很难处理。
- TextIO.Write不需要指定输出分片数量;它在不同的执行之间可能略有不同,即使对于完全相同的管道和相同的输入数据也是如此。在这种情况下追加的语义会非常混乱。
- 据我所知,不可能使用我知道的任何文件系统有效地实施追加,同时保留原子性和容错保证(例如,您生成所有输出或 none ,即使面对由于失败而重新执行的包)。
此行为将记录在 github 上出现的下一版 SDK 中。