我正在生成一个带有数据流的输出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()));
谢谢!
答案 0 :(得分:2)
执行此操作的正确方法是使用Custom Sink API。您可以从FileBasedSink
,FileBasedWriteOperation
和FileBasedWriter
派生(例如,您可以分别为CSVSink
,CSVWriteOperation
和CSVWriter
命名您的类。
唯一的非平凡逻辑将在CSVWriter
中。在其writeHeader()
中写下标题,并在write()
中写入CSV条目。
然后,您可以使用Write.to()
转换在管道中使用接收器,代替您当前正在使用的TextIO
。
SDK内置的一个好例子是the XML sink。
答案 1 :(得分:0)
您可以从DoFn#startBundle()
输出标题。