1

我正在生成一个带有数据流的输出 CSV 文件,我想写一个标题行,然后将我的所有输出附加到该行。我该怎么做呢?

我的流程大致是这样的:

    PCollection<String> output = data.apply(ParDo.of(new DoFn<String, String>() {
        private static final long serialVersionUID = 0;

        @Override
        public void processElement(ProcessContext c) {
            // Produce CSV output
        }
    })).apply(TextIO.Write.named("WriteData").to(options.getOutput()));

谢谢!

4

2 回答 2

2

正确的方法是使用Custom Sink API。您可以从FileBasedSink,FileBasedWriteOperation和派生FileBasedWriter(例如,您可以分别命名您的类CSVSink,CSVWriteOperationCSVWriter)。

唯一不平凡的逻辑将在CSVWriter. 将标题writeHeader()写入其中,并将 CSV 条目写入write().

然后,您可以使用Write.to()转换在管道中使用接收器,而不是TextIO您当前正在使用。

SDK 中内置的一个很好的示例是XML 接收器

于 2015-03-18T16:09:24.940 回答
0

您可以从DoFn#startBundle().

于 2015-03-18T04:25:39.357 回答