在 ParDo 中在哪里初始化可重用对象?



我的ParDo 在我的 beam 作业中的示例(使用 Dataflow 运行器运行(:

class StreamEventToJsonConverter : DoFn<MyClass, String>() {
@ProcessElement
fun processElement(@Element element: MyClass, receiver: OutputReceiver<String>) {
val gson = Gson()
val jsonValue = gson.toJson(element)
receiver.output(jsonValue)
}
}

我的问题是:我应该在processElement函数中初始化Gson对象吗?

它是每个工作线程只初始化一次还是每次新元素进入函数时初始化(似乎矫枉过正(?

鉴于 Gson 对象不可序列化。

谢谢。

原来我可以通过DoFn.Setup函数来做:

用于准备实例以处理元素包的方法的注释。

这是初始化暂时性内存中资源(如网络连接(的好地方。然后可以在DoFn.Teardown中处置资源。

根据文档

给定的DoFn实例通常会被调用一次或多次 处理一些任意的元素包。但是,Beam没有 保证准确的调用次数;它可能被多次调用 给定工作器节点上的时间,以说明故障和重试次数。如 这样,您可以在多个调用中缓存信息到您的 处理方法,但如果这样做,请确保实现 不依赖于调用次数。

基于此,似乎每次都会执行DoFn,并且根据您的用例,Gson对象将在工作节点中初始化不同的时间

最新更新