分块从HBase读取数据流/波束

分块从HBase读取数据流/波束,hbase,google-cloud-dataflow,apache-beam,google-cloud-bigtable,Hbase,Google Cloud Dataflow,Apache Beam,Google Cloud Bigtable,我试图理解如何将hbase数据库以10条记录为一批地摄取到ApacheBeam/Dataflow中 到目前为止,我已经尝试了下面的方法,为每一行提供触发器 PCollection<KV<Integer,String>> records = p.apply("read",HBaseIO.read() .withConfiguration(conf) .withTableId("Data")

我试图理解如何将hbase数据库以10条记录为一批地摄取到ApacheBeam/Dataflow中

到目前为止,我已经尝试了下面的方法,为每一行提供触发器

PCollection<KV<Integer,String>> records =  p.apply("read",HBaseIO.read()
                .withConfiguration(conf)
                .withTableId("Data")
                .withScan(scan))
                .apply(ParDo.of(new DoFn<Result, KV<Integer,String>>() {
                    @DoFn.ProcessElement
                    public void process(ProcessContext c){
                        Long ts = Bytes.toLong(c.element().getValue(Bytes.toBytes("timestamp"),Bytes.toBytes("timestamp")));
                        System.out.println(Long.toString(ts));
                        Integer pid = Bytes.toInt(c.element().getValue(Bytes.toBytes("patientid"),Bytes.toBytes("patientid")));
                        c.outputWithTimestamp(KV.of(pid,Long.toString(ts)),new Instant(ts));

                    }
                    @Override
                    public Duration getAllowedTimestampSkew(){
                        return Duration.standardDays(1);
                    }
                }));
但我需要的是将它们分成10个连续的行,然后运行下游管道

我尝试使用Windowing将数据分组到窗口中,因为我不断地丢失数据点。没有包含在任何窗口中,或者某些窗口即使准备好数据集也无法完成

请提供您的观点和想法来解决这类问题

谢谢。

模型上说:

梁管道通常关注于“”问题。因此,API强调并行处理元素,这使得表达“为PCollection中的每个元素分配序列号”之类的操作变得困难。这是有意为之的,因为这样的算法更容易受到可伸缩性问题的影响


因此,您不应该对PCollections中的排序进行假设。

能否详细说明为什么要将行分组为10个批次?哪些特定的行在同一个组中结束有关系吗?实际上,我想要的是将有序数据集摄取到dataflow/beam中,并每10秒触发一个窗口。使用原始事件时间戳。但是经过多次尝试,我看到很多不完整的窗口,一些窗口根本没有触发,甚至原始源也有所有的数据。听起来可能是您的窗口或触发策略设置不正确。您能否提供更多详细信息,例如您的代码、数据流作业ID以及预期行为和实际行为?我试图将数据库中的10行读取到PCollection中的单个对象中。即,PCollection的单个元素将包含10行元素。理想情况下,该批处理应该通过窗口处理来完成,这在目前看来是不一致的。