Java Dataflow 2.x在调用PCollectionTuple.apply()时抱怨参数类型不正确

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

我正在将现有管道迁移到dataflow 2.x。在管道的最后阶段,数据被写入谷歌云服务。数据需要压缩到.gz,因此之前在Dataflow1.x实现中,我们编写了自己的接收器来完成这项工作。在Dataflow2.x中,有一种内置的方法来实现这一点。我得到了应该是正确的代码,但是java编译器正在抱怨TextIO.write返回了不正确的类型。代码如下:

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));