DoFn.Setup 用于准备处理元素束的实例的方法的注释.
使用单词"bundle",取零参数.
DoFn.StartBundle 用于准备处理一批元素的实例的方法的注释.
使用"批处理"一词,取零个或一个参数(StartBundleContext一种访问方式PipelineOptions).
我需要在DoFn实例中初始化一个库,然后将该库用于"批处理"或"包"中的每个元素.我通常不会用这两个词分开头发,但在管道中,可能会有一些区别?
jkf*_*kff 22
a的生命周期DoFn如下:
SetupStartBundleProcessElementFinishBundleTeardown即,一个DoFn实例可以处理许多(零个或多个)束,并且在一个束中,它处理许多(零个或多个)元素.
无论Setup/ Teardown和StartBundle/ FinishBundle是可选的-这是可以实现的任何DoFn不使用他们,只有在做的工作ProcessElement,但是这将是低效的.两种方法都允许优化:
StartBundle/ FinishBundle告诉你批处理的允许边界是什么:基本上,你不允许批处理FinishBundle- FinishBundle必须强制批量清理(并且StartBundle必须初始化/重置批处理).这是我所知道的这些方法的唯一常见用法,但是如果你对更一般或更严格的解释感兴趣 - 捆绑是一个容错的单位,并且跑者认为到时候FinishBundle回归,你已完全执行与此捆绑包中所有元素相关的所有工作(输出元素或执行副作用); 工作不得在捆绑之间"泄漏".StartBundle/中执行此操作FinishBundle,但是,与待处理的副作用或输出不同,此类资源可以在bundle之间保留.这就是Setup和Teardown是.DoFn,例如解析配置文件等.这也是最好的Setup.更简洁:
Setup/中管理资源和昂贵的初始化Teardown.StartBundle/中的工作批处理FinishBundle.(管理bundle方法中的资源效率很低;在setup/teardown中管理批处理是明显不正确的,会导致数据丢失)
最近更新了DoFn文档以使其更加清晰.
| 归档时间: |
|
| 查看次数: |
2720 次 |
| 最近记录: |