[英]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.