【问题标题】:TextIO.Write - does it append to or replace the output files (Google Cloud Dataflow)TextIO.Write - 它是追加还是替换输出文件(谷歌云数据流) 【发布时间】:2015-05-30 21:13:45 【问题描述】: 我找不到任何关于它的文档,所以我想知道如果输出文件已经存在(在 gs:// 存储桶中),会有什么行为? 谢谢, G 【问题讨论】: 标签: google-cloud-dataflow 【解决方案1】: 文件将被覆盖。这样做有几个动机: “类似报告”的用例(计算输入数据的摘要并将结果放在 GCS 上)似乎比增量生成数据并将更多数据放在 GCS 上的用例频繁得多每次执行管道。 如果重新运行管道是幂等的(-ish?),那就太好了。例如。如果您在管道中发现错误,您可以修复它并重新运行它,并享受被覆盖的正确结果。在这个问题上,附加到文件的管道将很难使用。 TextIO.Write不需要指定输出分片数;即使对于完全相同的管道和相同的输入数据,它也可能在不同的执行之间略有不同。在这种情况下追加的语义会非常混乱。 据我所知,附加是不可能使用我知道的任何文件系统有效实现的,同时保留原子性和容错保证(例如,即使在面对由于失败而重新执行捆绑包)。 此行为将记录在 github 上出现的下一版 SDK 中。 【讨论】: 这仍然是正确的@jkff 吗?我很确定它们只有在共享相同数量的分片时才会被覆盖。否则文件名不同并保留旧文件 是的,感谢您的澄清。如果生成的文件与现有文件冲突,现有文件将被覆盖,否则现有文件将保持不变。