如何获取PCollection中的元素总数<string,string =“”>

时间:2019-04-21 22:31:55

标签: java apache google-cloud-platform apache-beam beam

我想获取PCollection<String, String>中的Apache梁中的元素总数。我想存储此计数以备将来使用。如何编写相同的Java代码?

1 个答案:

答案 0 :(得分:0)

在Apache Beam中,有一个名为Count的转换(此处是JavaDoc的链接)。这有一个称为globally的方法,该方法返回一个PCollection,其中包含输入PCollection中的元素数。您将使用此方法来获取元素计数。

这是我用来测试的逻辑片段:

private class MyMap extends SimpleFunction < Long, Long > {
    public Long apply(Long in ) {
        System.out.println("Length is: " + in );
        return in;
    }
}

public void run(String[] args) {
    PipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().create();
    Pipeline p = Pipeline.create(options);

    // Create a PCollection from static objects
    ArrayList < String > strs = new ArrayList < > ();
    strs.add("Neil");
    strs.add("John");
    strs.add("Bob");

    PCollection < String > pc1 = p.apply(Create.of(strs));
    PCollection < Long > count = pc1.apply(Count.globally());
    count.apply(MapElements.via(new MyMap()));

    System.out.println("About to run!");

    p.run().waitUntilFinish();

    System.out.println("Run complete!");
} // run

运行时,此代码创建一个包含三个字符串的PCollection。然后,我应用Count.globally()转换,最后应用Map记录新的PCollection,其中包含一个元素...长度。