小编sho*_*123的帖子

数据流/ApacheBeam 将输入限制为前 X 数量?

我有一个有界的 PCollection,但我只想获取前 X 个输入量并丢弃其余的。有没有办法使用 Dataflow 2.X/ApacheBeam 来做到这一点?

java google-cloud-dataflow apache-beam

7
推荐指数
1
解决办法
2413
查看次数

处理多个 PCollect 输出时找不到编码器

我的管道的这部分应该接受一个输入,对其应用适当的元组标记,然后根据它接收到的标记对输入进行进一步处理。

运行以下代码时,主标签 (tag1) 中的 PCollection 工作正常。但是,附加标签(tag2、tag3)将在以下位置抛出此错误.apply()

线程“main”中的异常 java.lang.IllegalStateException:无法为 Assign Output.out1 [PCollection] 返回默认编码器。更正以下根本原因之一: 没有手动指定编码器;您可以使用 .setCoder() 这样做。从 CoderRegistry 推断编码器失败:无法为 V 提供编码器。

为什么这个错误发生在 tag2 而不是 tag1?请注意,如果我将 tag2 设为主要输出,将 tag1/tag3 作为附加输出并适当地重新排序代码,则 tag2 处理成功,但 tag1/tag3 将引发错误。

主管道:

PCollectionTuple pct  = outputPair.apply("Assign Output", ParDo.of( new output())
              .withOutputTags(output.tag1, TupleTagList.of(output.tag2).and(output.tag3)));

//Tag1 Output
PCollection<KV<String, outResultPair>> tagPair1 = pct.get(output.tag1)
        .apply("Process", ParDo.of( new ABCOutput()))

//Tag2 Output 
PCollection<KV<String, outResultPair>> tagPair2 = pct.get(output.tag2)
        .apply("Process", ParDo.of( new DEFOutput())) //Error Thrown here
Run Code Online (Sandbox Code Playgroud)

支持类:

    //ABCOutput Class 
    @DefaultCoder(AvroCoder.class)
    public class ABCOutput extends DoFn<KV<String, inResultPair>, KV<String, …
Run Code Online (Sandbox Code Playgroud)

java google-cloud-platform google-cloud-dataflow apache-beam

4
推荐指数
1
解决办法
1754
查看次数