Google cloud dataflow Apache Beam TextIO.read,然后合并成批

Google cloud dataflow Apache Beam TextIO.read,然后合并成批,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,在使用TextIO.read获取单个行的PCollection后,是否可以使用某种组合转换,例如将25个批次分组?因此,返回类型最终看起来像:PCollection。看起来应该可以使用某种CombineFn,但是API对我来说还是有点神秘 这里的上下文是我正在阅读可能非常大的CSV文件,解析+处理这些行并将它们转换为JSON,然后调用RESTAPI。。。但是我不想对每一行单独使用REST API,因为REST API一次支持多个项,最多支持1000个项,所以不是整个批处理。我想您可以使用以下方法

在使用TextIO.read获取单个行的PCollection后,是否可以使用某种组合转换,例如将25个批次分组?因此,返回类型最终看起来像:PCollection。看起来应该可以使用某种CombineFn,但是API对我来说还是有点神秘


这里的上下文是我正在阅读可能非常大的CSV文件,解析+处理这些行并将它们转换为JSON,然后调用RESTAPI。。。但是我不想对每一行单独使用REST API,因为REST API一次支持多个项,最多支持1000个项,所以不是整个批处理。

我想您可以使用以下方法进行一些简单的批处理。要在BatchingFn中保持的状态是行或自身行的当前缓冲区。对不起,我是用python做的,不熟悉Java API

从apache_beam.transforms导入DoFn 从apache_beam.com导入ParDo 我的批次大小=512 类BatchingFnDoFn: 定义初始自身,批次大小=100: self.\u批次大小=批次大小 def start_束自身: 字符串缓冲区 self._行=[] def processself,元素: 输入元素是表示CSV行的字符串 self.\u lines.appendelement 如果len\u lines>=自身批量大小: 自冲洗批 def饰面_束自身: 在完成之前,处理未冲洗的缓冲区 如果自选线路: 自冲洗批 def_冲洗_批次自身: 使用self行在此处调用REST API ..... 清除缓冲区。 self._行=[] pcoll是您的PCollection行。 pcoll |“使用批处理数据调用Rest API”>>ParDoBatchingFnMY|u批处理大小
关于使用数据驱动触发器,您可以参考。

您是否尝试过使用大时间窗口的数据驱动触发器。如果我理解正确的话,您希望在聚合元素计数达到某个数字时发出整个批处理。我还没有尝试过,但在阅读之后,我想我对如何应用它还不是100%。我将更新最初问题的示例上下文/场景,并提供更多关于我所做工作的细节。