如何通过Dataflow的输出追加标题行?

时间:2015-03-18 03:42:09

标签: google-cloud-dataflow

我正在生成一个带有数据流的输出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()));

谢谢!

2 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是使用Custom Sink API。您可以从FileBasedSinkFileBasedWriteOperationFileBasedWriter派生(例如,您可以分别为CSVSinkCSVWriteOperationCSVWriter命名您的类。

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

然后,您可以使用Write.to()转换在管道中使用接收器,代替您当前正在使用的TextIO

SDK内置的一个好例子是the XML sink

答案 1 :(得分:0)

您可以从DoFn#startBundle()输出标题。