如果Google Cloud Dataflow中不存在,则使用TextIO.Write创建新存储桶

时间:2015-08-11 11:28:55

标签: java google-cloud-storage google-cloud-dataflow

我正在尝试检查在ParDo中创建的文件与存储在GCS中的文件不同。

要做到这一点,我尝试阅读文件并比较它们的差异。

        Pipeline p = Pipeline.create(c.getPipelineOptions());
        try {
            PCollection<String> lines = p.apply(
                    TextIO.Read
                            .named("Read Section on GS")
                            .from("gs://failbucket/foo/boo/ret.txt"))
                    .apply(ParDo
                            .of(new Util.viewDifferences2(c.element))
                            .named("only different"));

            lines.apply(
                    TextIO.Write.named("Write Document Different")
                            .to(pathGS)
                            .withSuffix(".json"));

            p.run();

        } catch (Exception e) {
            p = Pipeline.create(c.getPipelineOptions());
            PCollection<String> lines = p.apply(Create.of(sectionContent));

            lines.apply(TextIO.Write.named("Write new Document")
                    .to("gs://failbucket/foo/boo/ret").withSuffix(".txt"));
            p.run();
        }

最初文件不存在,所以Exception但是在try创建时有此消息“输出路径不存在或不可写”

你知道如何创造全新的道路吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用选项withoutValidation来阻止验证,但它会在gs中创建相应的存储桶。但如果父存储桶不存在,它将抛出异常

在你的情况下,如果&#34; failbucket&#34;存储桶不存在它会抛出以下错误。

  

引起:java.io.IOException:无法写入GCS路径gs://failbucket/foo/boo/ret/xxx.txt

但如果&#34; failbucket&#34;存储桶存在于您的gs项目中,如果这些存储桶不存在,它将创建foo / boo / buckets。

在你的情况下,如果&#34; failbucket&#34;桶存在于你的gs中

            lines.apply(TextIO.Write.named("Write new Document")
                .to("gs://failbucket/foo/boo/ret")
                .withoutValidation()
                .withSuffix(".txt")); 

答案 1 :(得分:1)

您的异常处理代码似乎正在提交Dataflow管道,其唯一目的是在Google云端存储中创建一个空文件。

这不是特别有效。相反,您可以直接使用Google Cloud Storage API与GCS存储桶进行交互。为此,此API更加高效和全面。例如,您可以在启动主Dataflow管道之前使用此API。

另一种方法是试用gsutil工具。此命令行工具具有与GCS存储桶交互的类似功能。您也可以在启动Java程序之前从Java程序或单独调用它。

通常不鼓励在数据流中禁用TextIO验证的方法。在云平台中开始执行管道之前,此验证可以提供快速且早期捕获错误的好处。也就是说,在作业提交时无法验证先决条件的极少数情况下,应禁用验证。