繁体   English   中英

Apache Beam FILE IO WriteDynamic Remove Sink Timestamp

[英]Apache Beam FILE IO WriteDynamic Remove Sink Timestamp

大家好,我正在使用 Apache beam,我正在尝试将一些记录作为 CSV 存储在 Google Cloud Storage 上,我必须使用 FileIO WriteDynamic 方法才能将 CSV 的名称写入字符串中。 我的代码如下所示:

orders.get(validationErrorTupleTag)
            .apply("Convert Validation Error To KV", ParDo.of(new DoFn<ValidationError, KV<String, String>>() {
                @ProcessElement
                public void processElement(ProcessContext context) {
                    ValidationError validationError = context.element();
                    String errorRow = String.format("%s, %s, %s, %s, %s, %s",
                            validationError.getValidationType(),
                            validationError.getValidationRulesType(),
                            validationError.getErrorMessage(),
                            validationError.getErrorElement(),
                            validationError.getOrderNumber(),
                            validationError.getFileName());

                    context.output(KV.of(validationError.getFileName(), errorRow));
                }
            }))
            .apply("Window", Window.<KV<String, String>>into(FixedWindows.of(Duration.standardSeconds(1)))
                    .triggering(Repeatedly.forever(AfterFirst.of(AfterPane.elementCountAtLeast(10),
                            AfterProcessingTime
                                    .pastFirstElementInPane()
                                    .plusDelayOf(Duration.standardSeconds(1)))))
                    .withAllowedLateness(Duration.standardSeconds(10))
                    .discardingFiredPanes())
            .apply("Write CSV to GCS", FileIO.<String, KV<String, String>>writeDynamic()
                    .by(KV::getKey)
                    .withDestinationCoder(StringUtf8Coder.of())
                    .via(Contextful.fn(KV::getValue), TextIO.sink())
                    .to(path)
                    .withNaming(key -> FileIO.Write.defaultNaming("error-" + key, ".csv"))
            );

该文件写入正确但名称如下:

error-helloWorld-2022-03-23T23:14:31.000Z-2022-03-23T23:14:32.000Z-0-00000-of-00001.csv

是否可以使用 FileIO 在没有分片时间戳的情况下写入文件?

提前致谢

您可以提供自己的FileIO.Write.FileNaming实例,而不是使用FileIO.Write.defaultNaming ,它可以根据您的意愿对时间戳、分片标识符等进行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM