Java Dataflow 2.x在调用PCollectionTuple.apply()时抱怨参数类型不正确
我正在将现有管道迁移到dataflow 2.x。在管道的最后阶段,数据被写入谷歌云服务。数据需要压缩到.gz,因此之前在Dataflow1.x实现中,我们编写了自己的接收器来完成这项工作。在Dataflow2.x中,有一种内置的方法来实现这一点。我得到了应该是正确的代码,但是java编译器正在抱怨TextIO.write返回了不正确的类型。代码如下:Java Dataflow 2.x在调用PCollectionTuple.apply()时抱怨参数类型不正确,java,apache-beam,dataflow,Java,Apache Beam,Dataflow,我正在将现有管道迁移到dataflow 2.x。在管道的最后阶段,数据被写入谷歌云服务。数据需要压缩到.gz,因此之前在Dataflow1.x实现中,我们编写了自己的接收器来完成这项工作。在Dataflow2.x中,有一种内置的方法来实现这一点。我得到了应该是正确的代码,但是java编译器正在抱怨TextIO.write返回了不正确的类型。代码如下: PCollectionTuple results = /* some transforms */ // write main result re
PCollectionTuple results = /* some transforms */
// write main result
results.get(mainOutputTag).
apply("WriteProfile", TextIO.write().to(outputBucket)
.withSuffix(".json")
.withWritableByteChannelFactory(FileBasedSink.CompressionType.GZIP)
.withNumShards(numChunks));
Java的编译器正在抱怨,出现以下错误:
The method apply(String, PTransform<? super PCollection<TableRow>,OutputT>) in the type PCollection<TableRow> is not applicable for the arguments (String, TextIO.Write)
有人看到我上面的代码有什么问题吗?如果您需要更多的上下文,请告诉我。我最终解决了这个问题。问题是我试图将PCollection写入文件,其中只有PCollection可以写入文件 这是我的最终解决方案:
PCollectionTuple results = /* some transforms */
// write main result
results.get(mainOutputTag) /* PCollection<TableRow> */
.apply(ParDo.of(new DoFn<TableRow, String>() {
@ProcessElement
public void processElement(ProcessContext c) {
c.output(c.element().toString());
}
})) /* PCollection<String> */
.apply("WriteProfile", TextIO.write().to(outputBucket)
.withSuffix(".json")
.withWritableByteChannelFactory(FileBasedSink.CompressionType.GZIP)
.withNumShards(numChunks));